Linux讀寫鎖的使用


讀寫鎖是用來解決讀者寫者問題的,讀操作可以共享,寫操作是排它的,讀可以有多個在讀,寫只有唯一個在寫,寫的時候不允許讀。

具有強讀者同步和強寫者同步兩種形式:

強讀者同步:當寫者沒有進行寫操作時,讀者就可以訪問;

強寫者同步: 當所有寫者都寫完之后,才能進行讀操作,讀者需要最新的信息,一些實時性較高的系統會用到這種鎖。

讀寫鎖的初始化:

pthread_rwlock_t m_rw_lock;

pthread_rwlock_init(pthread_rwlock_t*, pthread_rwattr_t*);

獲取讀寫鎖的讀鎖操作:分為阻塞式獲取和非阻塞式獲取,如果讀寫鎖由一個寫者持有,則讀線程會阻塞直到寫入者釋放讀寫鎖。

阻塞式:pthread_rwlock_rdlock(pthread_rwlock_t);

非阻塞式:pthread_rwlock_tryrdlock(pthread_rwlock_t);

返回值:0,表示成功; 非0表示錯誤碼;非阻塞會返回ebusy而不會讓線程等待。

 

獲取讀寫鎖的寫鎖操作:分為阻塞和非阻塞,如果對應的讀寫鎖被其它寫者持有,或者讀寫鎖被讀者持有,該線程都會阻塞等待。

阻塞式:pthread_rwlock_wrlock(pthread_rwlock_t*);

非阻塞式:pthread_rwlock_trywrlock(pthread_rwlock_t*);

釋放讀寫鎖:

  pthread_rwlock_unlock(pthread_rwlock_t*);

 

互斥鎖與讀寫鎖的區別:

1、當訪問臨界區的資源時(訪問的含義包括所有的操作),需要上互斥鎖;

2、當對數據(互斥鎖中的臨界區資源)進行讀取時,需要上讀取鎖,當對數據進行寫入時,需要上寫入鎖。

 

讀寫鎖的優點:

對於讀數據較修改數據頻繁的應用,用讀寫鎖代替互斥鎖可以提高效率。因為使用互斥鎖時,即使是讀出數據(相當於操作臨界區資源)都需要上互斥鎖;而采用讀寫鎖則允許在任一時刻多個讀出

者存在,提高了並發性。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM