2

我有以下 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 的等效方法来实现相同的功能?

4

2 回答 2

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 循环中执行此操作。

于 2009-07-23T23:58:39.847 回答
1

我总是只使用带有 pthread_join 的 for 循环

int i;
for(i=0;i<threads;i++)
    pthread_join(tids[i], NULL);
于 2009-07-23T23:59:03.683 回答