我刚刚开始使用posix pthreads(在c ++上)。 我正在尝试使用条件变量一次启动多个线程。
有人知道更好的方法吗?或者可以举例说明一个人会怎么做?
答案 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
时,所有等待的线程将继续。