silentman
16-07-2004, 10:06
Un bel problema:
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <pthread.h>
void * thread_function(void *x);
int main(int argc, char *argv[])
{
int rc;
pthread_t tid;
void *rp;
if ( pthread_create(&tid, NULL, thread_function, rp) != 0 ) {
return(-1);
}
system ("/bin/touch ./STOPPED");
return(0);
}
void * thread_function(void *x)
{
int count=0;
while(1)
{
printf("thread: %d\n",count++);
sleep(1);
}
return(NULL);
}
A valle dell'esecuzione della pthread_create(), il programma rimane bloccato sulla system(), il file "STOPPED" non viene creato.
Compilato con:
CC= g++ -fPIC $(CFLAGS) -g -O3 -static
su vari kernel, stesso risultato.
Provato anche a:
- creare il thread in DETACHED state
- uscire dal thread con pthread_exit() invece di return()
- usare pthread_cancel() dal main thread
ottenendo sempre lo stesso risultato.
Idee?
"Astenersi perditempo"
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <pthread.h>
void * thread_function(void *x);
int main(int argc, char *argv[])
{
int rc;
pthread_t tid;
void *rp;
if ( pthread_create(&tid, NULL, thread_function, rp) != 0 ) {
return(-1);
}
system ("/bin/touch ./STOPPED");
return(0);
}
void * thread_function(void *x)
{
int count=0;
while(1)
{
printf("thread: %d\n",count++);
sleep(1);
}
return(NULL);
}
A valle dell'esecuzione della pthread_create(), il programma rimane bloccato sulla system(), il file "STOPPED" non viene creato.
Compilato con:
CC= g++ -fPIC $(CFLAGS) -g -O3 -static
su vari kernel, stesso risultato.
Provato anche a:
- creare il thread in DETACHED state
- uscire dal thread con pthread_exit() invece di return()
- usare pthread_cancel() dal main thread
ottenendo sempre lo stesso risultato.
Idee?
"Astenersi perditempo"