On Friday 02 December 2011 10:23:49 you wrote: > My program use co-threads, because creating and reinitialize thread is > expensive, it first create threads and reuse them. The main thread > will send each co-thread a event (through condition variable) > simultaneously to do task in parallel way. Each co-thread has variety > work-time, let say it can be (in miliseconds) 200ms, 130ms, 317ms, > 90ms etc to get result to be consumed by main thread. > > Here I did to wake-up all threads in the main thread: > > ..... > for (i = 0; i < nthread; i++) > pthread_cond_broadcast(&cond); > wait_all_worker(); /* wait for all worker threads to finish */ > get_all_worker_result(); /* get result from all worker thread */ > ... > > > And worker-thread routines: > > ... > for (;;) { > pthread_mutex_lock(); > pthread_cond_wait(); > pthread_mutex_unlock(); > > do_work(); > fill_result(); > } > .... > > My dilema is: > > 1. What the proper way to the main thread to wait for all co-threads > until finished? I would use a semaphore which should be locked by the treads once the condition variable is set en unlocked when the result is available for the main thread. > 2. After calling pthread_cond_signal() or pthread_cond_broadcast() > followed by sleep()/nanosleep(), > the condition variable looks like not signaled, (the co-thread > routine doesn't run). What make this? I don't understand, please provide a working example -- Bogdan -- To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html