假設有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