免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: sublx
打印 上一主题 下一主题

[函数] 请教大家一个关于pthread_cond_timedwait的问题 [复制链接]

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
11 [报告]
发表于 2012-09-20 23:12 |只看该作者
time wait是释放锁挂起, 当time wait解除挂起并函数返回的时候它必须能够获得锁, 否则它就一直等到能获得锁才返回.

这里分析就是你别的代码一直把锁拿着, 导致这边也起不来, 简单的说就是死锁了.

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
12 [报告]
发表于 2012-09-20 23:16 |只看该作者
csdn的Linux板块也是你问的吧, 记得把分结给我噢.

论坛徽章:
1
2015年亚洲杯之巴林
日期:2015-02-05 20:34:47
13 [报告]
发表于 2012-09-20 23:17 |只看该作者
我的程序的顺序是:
pthread_mutex_lock(&mutex)
printf("xxx\n");  //有打印
pthread_cond_timedwait();//阻塞。
///
printf("MMMMM\n");//没打印

我想问的是,pthread_cond_timewait 执行完之后,其他的线程能获得mutex那个锁吗(并一直持有,不释放,导致timedwait阻塞)?

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
14 [报告]
发表于 2012-09-20 23:21 |只看该作者
1, lock的确拿到锁了.
2, cond_timewait的确把锁放掉并挂起了.
3, 第二步之后, 其他线程就可以lock这个mutex了.
4, cond_timewait超时了, 但其他某个线程lock着mutex还没放.
5, 所以cond_timewait没法返回, 因为它返回的前提是必须能拿到mutex.

还不懂吗... 看APUE吧, 我不讲了.

论坛徽章:
1
2015年亚洲杯之巴林
日期:2015-02-05 20:34:47
15 [报告]
发表于 2012-09-20 23:23 |只看该作者
linux_c_py_php 发表于 2012-09-20 23:21
1, lock的确拿到锁了.
2, cond_timewait的确把锁放掉并挂起了.
3, 第二步之后, 其他线程就可以lock这个mu ...


谢谢 明白了。我找下原因

论坛徽章:
1
2015年亚洲杯之巴林
日期:2015-02-05 20:34:47
16 [报告]
发表于 2012-09-21 11:19 |只看该作者
这个问题确实比较头疼,我看了另外的线程已经pthread_cond_signal了,timedwait那里就是没收到,也看了没发现那里会lock那个互斥变量。有什么情况下 signal 发了 timedwait收不到的吗?

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
17 [报告]
发表于 2012-09-21 13:45 |只看该作者
sublx 发表于 2012-09-20 20:59
请问一下pthread_cond_timedwait 在什么情况下,超时时间到了没返回?现在遇到了一个比较奇怪的问题。我设置 ...

我这里正常,检查自己的流程。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP