免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4067 | 回复: 6
打印 上一主题 下一主题

linux 多线程 锁 求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-03 11:47 |只看该作者 |倒序浏览
在很多系统上,当一个锁的owner没有释放该unix锁,就退出了,那么默认的方式就是其它线程再去加这个unix锁的时候,就会阻塞,造成死锁。而通过不同的属性初始化这个锁,我们能够改变这种默认的方式:
pthread_mutexattr_setprotocol(&mattr, PTHREAD_PRIO_INHERIT);  
pthread_mutexattr_setrobust_np(&mattr,PTHREAD_MUTEX_ROBUST_NP);
通过设置锁的上面两个属性,我们就改变了默认的行为,当一个unix锁的owner死掉后,其它线程再去加这个锁的时候,不会被阻塞,而是通过返回值EOWNERDEAD来报告错误,那么你可以根据这个错误来进行处理:首先是应该调用pthread_mutex_consistent_np函数来恢复该锁的一致性,然后调用解锁pthread_mutex_unlock,接下来在调用加锁,这样该锁的行为就恢复正常了。

这是我在网上找的一篇文章,我的问题是 pthread_mutex_consistent_np函数是做什么用的 ???
什么是mutex锁的一致性????
为什么要恢复锁的一致性????


谢谢各位大侠 在线等待。。

论坛徽章:
0
2 [报告]
发表于 2011-08-05 04:02 |只看该作者
就是做这个用啊,至于内部原理你管他呢,等你用的熟了自然就知道了

论坛徽章:
0
3 [报告]
发表于 2011-08-05 10:21 |只看该作者
好吧 暂时听你的啦~~

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
4 [报告]
发表于 2011-08-05 11:41 |只看该作者
如果没记错的话。pthread_mutex锁是解锁必须由上锁的线程执行,而不能一个线程上锁另一个解锁。
而那个上锁的进程已经死了。那么这个函数应该是用来接管这个锁,就是把锁的从属归到本线程,这个时候就能成功解锁了,好象是这样的

论坛徽章:
0
5 [报告]
发表于 2011-08-05 14:04 |只看该作者
回复 4# smalloc


    恩 这个解释比较合理。。赞一个。。

论坛徽章:
0
6 [报告]
发表于 2011-08-05 20:03 |只看该作者
顶后再看

论坛徽章:
0
7 [报告]
发表于 2013-04-15 11:12 |只看该作者
回复 4# smalloc


    这个说法比较有说服力
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP