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