加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

C Boost线程睡眠死锁

发布时间:2021-01-13 04:36:11 所属栏目:Linux 来源:网络整理
导读:我有以下代码的问题: #include [LATER EDIT] 好吧,所以看起来像boost :: this_thread :: sleep在后台获取了一个互斥锁,所以我想我会坚持使用普通的老式睡眠(),这对我来说很有用. [/ LATER EDIT] 从main()我发出一个计算2秒的t1线程和另一个执行以下操作的

我有以下代码的问题:

#include 

[LATER EDIT]
好吧,所以看起来像boost :: this_thread :: sleep在后台获取了一个互斥锁,所以我想我会坚持使用普通的老式睡眠(),这对我来说很有用.
[/ LATER EDIT]

从main()我发出一个计算2秒的t1线程和另一个执行以下操作的线程:fork()在其中,父级等待子级,子级创建另一个也计数2秒的线程.

问题是如果我使用boost :: this_thread:sleep程序挂起或以某种方式死锁.如果我使用sleep(),那么它可以正常工作.我在这里做错了吗?这两者有什么区别?

从睡眠的男人页面我得到了:

“sleep()使调用线程休眠直到秒秒或信号到达,但不会被忽略.

同样来自boost docs,boost :: this_thread :: sleep似乎做同样的事情.

最佳答案 你在这做危险的事情:
fork调用复制整个程序,但只运行一个线程(当前一个)
在新的过程中.所以所有的互斥锁在这里,但只有一个线程.
如果某些线程锁定互斥锁并且您的线程尝试将其锁定在新进程中,
它将永远等待.

这里

boost::this_thread::sleep(boost::posix_time::millisec(1000));

如果看一下boost的包含文件,睡眠看起来像:

this_thread::sleep(get_system_time()+rel_time);

get_system_time从libc调用tz_convert,它接受mutex.看起来像叉之前另一个线程锁定它,并…

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读