Chinaunix

标题: linux 多线程 锁 求助 [打印本页]

作者: longmm1988    时间: 2011-08-03 11:47
标题: linux 多线程 锁 求助
在很多系统上,当一个锁的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锁的一致性????
为什么要恢复锁的一致性????


谢谢各位大侠 在线等待。。
作者: oooooxxxxx    时间: 2011-08-05 04:02
就是做这个用啊,至于内部原理你管他呢,等你用的熟了自然就知道了
作者: longmm1988    时间: 2011-08-05 10:21
好吧 暂时听你的啦~~
作者: smalloc    时间: 2011-08-05 11:41
如果没记错的话。pthread_mutex锁是解锁必须由上锁的线程执行,而不能一个线程上锁另一个解锁。
而那个上锁的进程已经死了。那么这个函数应该是用来接管这个锁,就是把锁的从属归到本线程,这个时候就能成功解锁了,好象是这样的
作者: longmm1988    时间: 2011-08-05 14:04
回复 4# smalloc


    恩 这个解释比较合理。。赞一个。。
作者: qiangtoucao121    时间: 2011-08-05 20:03
顶后再看
作者: cxm240    时间: 2013-04-15 11:12
回复 4# smalloc


    这个说法比较有说服力




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2