- 論壇徽章:
- 0
|
在很多系統(tǒng)上,當(dāng)一個(gè)鎖的owner沒有釋放該unix鎖,就退出了,那么默認(rèn)的方式就是其它線程再去加這個(gè)unix鎖的時(shí)候,就會(huì)阻塞,造成死鎖。而通過不同的屬性初始化這個(gè)鎖,我們能夠改變這種默認(rèn)的方式:
pthread_mutexattr_setprotocol(&mattr, PTHREAD_PRIO_INHERIT);
pthread_mutexattr_setrobust_np(&mattr,PTHREAD_MUTEX_ROBUST_NP);
通過設(shè)置鎖的上面兩個(gè)屬性,我們就改變了默認(rèn)的行為,當(dāng)一個(gè)unix鎖的owner死掉后,其它線程再去加這個(gè)鎖的時(shí)候,不會(huì)被阻塞,而是通過返回值EOWNERDEAD來報(bào)告錯(cuò)誤,那么你可以根據(jù)這個(gè)錯(cuò)誤來進(jìn)行處理:首先是應(yīng)該調(diào)用pthread_mutex_consistent_np函數(shù)來恢復(fù)該鎖的一致性,然后調(diào)用解鎖pthread_mutex_unlock,接下來在調(diào)用加鎖,這樣該鎖的行為就恢復(fù)正常了。
這是我在網(wǎng)上找的一篇文章,我的問題是 pthread_mutex_consistent_np函數(shù)是做什么用的 ???
什么是mutex鎖的一致性????
為什么要恢復(fù)鎖的一致性????
謝謝各位大俠 在線等待。。 |
|