在我的守护进程开始工作之前,它用四个不同的线程初始化自己。现在,我使用一个计数器,它在线程启动时递增,在线程完成时减少。当计数器命中0时,我调用初始化已完成的回调。
是最好的方法,还是有更好的方法?,我使用POSIX线程(pthread),只运行一个while循环,等待计数器命中0。
编辑: pthread_barrier_*函数在我的平台上是不可用的,尽管它们似乎是最好的选择。
编辑2:并不是所有线程都退出。一些初始化,然后侦听事件。基本上,线程需要说,“我已经完成了初始化”。
发布于 2011-05-26 13:46:47
而不是旋转,而是使用p线程mutex/condvar原语。我建议使用一个互斥锁来保护未执行线程数和condvar。
主循环如下所示:
acquire mutex
count=N_THREADS;
start your N threads
while (1) {
if (count==0) break;
cond_wait(condvar);
}
release mutex当每个线程准备就绪时,它就会做这样的事情:
acquire mutex
count--
cond_signal(condvar)
release mutex(编辑:我假设线程一旦完成初始化工作就会继续运行。如果要完成,就像其他人所说的那样使用pthread_join。)
发布于 2011-05-26 13:44:43
障碍是你所需要的。它们是为此而创建的,在继续之前,您需要在特定的时间点“遇到”。请参阅pthread_barrier_*
发布于 2011-05-26 13:41:36
pthread_join是等待线程的首选方法。
https://stackoverflow.com/questions/6139331
复制相似问题