Subject: Re: Two questions
To: None <current-users@netbsd.org>
From: Mihai CHELARU <kefren@netbastards.org>
List: current-users
Date: 04/28/2003 13:32:19
On Monday 28 April 2003 10:34, Mihai CHELARU wrote:
> 2) Anyone is experiencing problems using threads and time wait
> functions like nanosleep (or usleep) and pthread_cond_timedwait ?
> Using those in a code results in infinite (sa)wait. Could be my poor
> code or something else, just want to check.
Here is a smaller code that is reproducing the situation. The code hangs
at first usleep (100000) in th2() so you'll not be able to see any
THREAD: Leaving....
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <signal.h>
pthread_mutex_t m;
pthread_cond_t c;
void *th2 (void *x)
{
int i=(*(int*)x);
pthread_cond_signal (&c);
while (i>0) {
printf ("THREAD: Ok. pause for %d\n",i);
usleep (100000);
printf ("THREAD: Leaving %d\n",i);
usleep (100000);
}
}
main ()
{
pthread_t t;
int i;
pid_t p;
for (;;) {
p=fork ();
if (p<=0) break;
waitpid (p,NULL,0);
return 0;
}
pthread_mutex_init (&m, NULL);
pthread_cond_init (&c, NULL);
for (i=0;i<255;i++) {
pthread_create (&t, NULL, th2, (void*)(&i));
pthread_detach (t);
pthread_mutex_lock (&m);
pthread_cond_wait (&c, &m);
pthread_mutex_unlock (&m);
}
sleep (2000);
return 0;
}