首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程自旋锁?

多线程自旋锁?
EN

Stack Overflow用户
提问于 2011-05-26 13:34:02
回答 6查看 543关注 0票数 3

在我的守护进程开始工作之前,它用四个不同的线程初始化自己。现在,我使用一个计数器,它在线程启动时递增,在线程完成时减少。当计数器命中0时,我调用初始化已完成的回调。

是最好的方法,还是有更好的方法?,我使用POSIX线程(pthread),只运行一个while循环,等待计数器命中0。

编辑: pthread_barrier_*函数在我的平台上是不可用的,尽管它们似乎是最好的选择。

编辑2:并不是所有线程都退出。一些初始化,然后侦听事件。基本上,线程需要说,“我已经完成了初始化”。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-05-26 13:46:47

而不是旋转,而是使用p线程mutex/condvar原语。我建议使用一个互斥锁来保护未执行线程数和condvar。

主循环如下所示:

代码语言:javascript
复制
acquire mutex
count=N_THREADS;
start your N threads
while (1) {
  if (count==0) break;
  cond_wait(condvar);
}
release mutex

当每个线程准备就绪时,它就会做这样的事情:

代码语言:javascript
复制
acquire mutex
count--
cond_signal(condvar)
release mutex

(编辑:我假设线程一旦完成初始化工作就会继续运行。如果要完成,就像其他人所说的那样使用pthread_join。)

票数 3
EN

Stack Overflow用户

发布于 2011-05-26 13:44:43

障碍是你所需要的。它们是为此而创建的,在继续之前,您需要在特定的时间点“遇到”。请参阅pthread_barrier_*

票数 7
EN

Stack Overflow用户

发布于 2011-05-26 13:41:36

pthread_join是等待线程的首选方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6139331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档