Linux读写锁释放,Linux读写锁的使用
讀寫(xiě)鎖是用來(lái)解決讀者寫(xiě)者問(wèn)題的,讀操作可以共享,寫(xiě)操作是排它的,讀可以有多個(gè)在讀,寫(xiě)只有唯一個(gè)在寫(xiě),寫(xiě)的時(shí)候不允許讀。
具有強(qiáng)讀者同步和強(qiáng)寫(xiě)者同步兩種形式:
強(qiáng)讀者同步:當(dāng)寫(xiě)者沒(méi)有進(jìn)行寫(xiě)操作時(shí),讀者就可以訪問(wèn);
強(qiáng)寫(xiě)者同步: 當(dāng)所有寫(xiě)者都寫(xiě)完之后,才能進(jìn)行讀操作,讀者需要最新的信息,一些實(shí)時(shí)性較高的系統(tǒng)會(huì)用到這種鎖。
讀寫(xiě)鎖的初始化:
pthread_rwlock_t m_rw_lock;
pthread_rwlock_init(pthread_rwlock_t*, pthread_rwattr_t*);
獲取讀寫(xiě)鎖的讀鎖操作:分為阻塞式獲取和非阻塞式獲取,如果讀寫(xiě)鎖由一個(gè)寫(xiě)者持有,則讀線程會(huì)阻塞直到寫(xiě)入者釋放讀寫(xiě)鎖。
阻塞式:pthread_rwlock_rdlock(pthread_rwlock_t);
非阻塞式:pthread_rwlock_tryrdlock(pthread_rwlock_t);
返回值:0,表示成功; 非0表示錯(cuò)誤碼;非阻塞會(huì)返回ebusy而不會(huì)讓線程等待。
獲取讀寫(xiě)鎖的寫(xiě)鎖操作:分為阻塞和非阻塞,如果對(duì)應(yīng)的讀寫(xiě)鎖被其它寫(xiě)者持有,或者讀寫(xiě)鎖被讀者持有,該線程都會(huì)阻塞等待。
阻塞式:pthread_rwlock_wrlock(pthread_rwlock_t*);
非阻塞式:pthread_rwlock_trywrlock(pthread_rwlock_t*);
釋放讀寫(xiě)鎖:
pthread_rwlock_unlock(pthread_rwlock_t*);
互斥鎖與讀寫(xiě)鎖的區(qū)別:
1、當(dāng)訪問(wèn)臨界區(qū)的資源時(shí)(訪問(wèn)的含義包括所有的操作),需要上互斥鎖;
2、當(dāng)對(duì)數(shù)據(jù)(互斥鎖中的臨界區(qū)資源)進(jìn)行讀取時(shí),需要上讀取鎖,當(dāng)對(duì)數(shù)據(jù)進(jìn)行寫(xiě)入時(shí),需要上寫(xiě)入鎖。
讀寫(xiě)鎖的優(yōu)點(diǎn):
對(duì)于讀數(shù)據(jù)較修改數(shù)據(jù)頻繁的應(yīng)用,用讀寫(xiě)鎖代替互斥鎖可以提高效率。因?yàn)槭褂没コ怄i時(shí),即使是讀出數(shù)據(jù)(相當(dāng)于操作臨界區(qū)資源)都需要上互斥鎖;而采用讀寫(xiě)鎖則允許在任一時(shí)刻多個(gè)讀出
者存在,提高了并發(fā)性。
總結(jié)
以上是生活随笔為你收集整理的Linux读写锁释放,Linux读写锁的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux 生成密码本,Linux下Ce
- 下一篇: linux socket原理,socke