是否有一个等效于WatiForMultipleObjects的pthread

时间:2009-07-23 23:52:50

标签: pthreads

我有以下Windows代码产生两个线程,然后等待它们都完成:

hThreads[0] = _beginthread(&do_a, 0, p_args_a);
hThreads[1] = _beginthread(&do_b, 0, p_args_b);
WaitForMultipleObjects(2, hThreads, TRUE, INFINITE);

我现在移植相同的代码以使用pthreads,但我不确定如何执行等效的WaitForMultipleObjects

pthread_create(&hThreads[0], 0, &do_a, p_args_a);
pthread_create(&hThreads[1], 0, &do_b, p_args_b);
???

是否有使用pthreads的等效方法来实现相同的功能?

2 个答案:

答案 0 :(得分:4)

如果您想等待所有操作,就像在这里一样,您只需为每个线程调用pthread_join()即可。它将完成同样的事情。

pthread_create(&hThreads[0], 0, &do_a, p_args_a);
pthread_create(&hThreads[1], 0, &do_b, p_args_b);

pthread_join(hThreads[0], NULL);
pthread_join(hThreads[1], NULL);

如果你有超过几个线程,你可以在for循环中做到这一点。

答案 1 :(得分:1)

我总是在pthread_join

中使用for循环
int i;
for(i=0;i<threads;i++)
    pthread_join(tids[i], NULL);