假设有NUM_TREADS
线程,并且他们必须在完成job2()
之前完成job1()
。如何保证这一点,就像这样:等待所有线程完成一份工作,然后再做另一个
void thread_func(void *arg)
{
while(1) {
job1();
some_kind_of_waiting();
job2();
}
return NULL;
}
会喜欢下面的工作或信号是否有任何其他/更好的解决方案?
{
static int done;
static sem_t semaphore;
if(__sync_fetch_and_add(&done, 1) == THREAD_NUMS-1) {
done = 0;
for(i = 0; i < THREAD_NUMS-1; i++)
sem_post(&semaphore);
} else
sem_wait(&semaphore);
}
谢谢。
这是一个C或C + +的问题?答案取决于你使用的语言。 –
您正在从'void'函数返回NULL。 –
你可以使用C++ std :: future吗? – Alek86