pthread使用条件变量来启动几个线程"一次"

时间:2014-06-16 22:27:29

标签: pthreads posix condition-variable

我刚刚开始使用posix pthreads(在c ++上)。 我正在尝试使用条件变量一次启动多个线程。

有人知道更好的方法吗?或者可以举例说明一个人会怎么做?

1 个答案:

答案 0 :(得分:1)

如果您排除了pthread_cond_broadcast,并且正在尝试这样做,您可能已经创建了线程,并且可能正在寻找一种方法来同时收集释放它们。如果是这种情况,您可能想要使用屏障。

您可以使用pthread_barrier_init初始化屏障,该屏障采用您想要等待的线程数的参数。当指定的线程数达到pthread_barrier_wait语句时,所有等待的线程立即被释放(即标记为准备好运行),但当然它们仍然受制于调度程序的一时兴起,可能会立即或不立即执行获得处理器时间。

一个非常简单的草图

void* tfunc(void *)
{
    pthread_barrier_wait(&bar);

    //do stuff
}

pthread_barrier_init(&bar, NULL, 4);

for (int i = 0; i < 4; ++i)
    pthread_create(&tid[i], NULL, tfunc, NULL);

当第4个线程点击wait时,所有等待的线程将继续。