linux操作系统之读写锁
(1)讀寫鎖:只有一把鎖,但是有兩種狀態(tài)(讀,寫)
? ? ? ? ? ? ?1)讀寫鎖的三種狀態(tài):讀鎖,寫鎖,不加鎖
? ? ? ? ? ? ?2)讀寫鎖特性(12字):寫鎖優(yōu)先級高,寫獨占,讀共享
? ? ? ? ? ? ? ? ? ? 1>寫模式加鎖時,解鎖前,所有對該線程加鎖的線程都會被阻塞。
? ? ? ? ? ? ? ? ? ? 2>讀模式加鎖時,如果線程是讀加鎖則成功,如果線程是寫加鎖會阻塞。
? ? ? ? ? ? ? ? ? ?3>讀鎖、寫鎖并行阻塞時,寫鎖優(yōu)先級高,即解鎖后優(yōu)先執(zhí)行寫鎖操作。
? ? ? ? ? ?3)讀寫鎖非常適合對數(shù)據(jù)讀的次數(shù)比寫的次數(shù)多。
(2)讀寫鎖函數(shù):成功返回0,失敗直接返回錯誤號。
? ? ? ? ? ? ? ? ? pthread_rwlock_t類型 用于定義一個讀寫鎖變量
? ? ? ? ? 1)pthread_rwlock_init:初始化一把讀寫鎖
? ? ? ? ? ? ? ? int pthread_rwolck_init(pthread_rwlock_t*restrict rwlock,const pthread_rwlockattr_t*restrict attr);? ??
? ? ? ? ? ? ? ?restrict關鍵字:只用于限制指針,所有修改該指針指向內存中內容的操作,只能通過本指針來完成,不能通過除本指針之外的其它變量或指針修改。
? ? ? ? ? ? ? 參數(shù)2:attr表讀寫屬性,通常使用NULL,表示默認屬性
? ? ? ? ?2)銷毀一把讀寫鎖:pthread_rwlock_destroy
? ? ? ? ? ? ? ?int pthread_rwlock_destroy(pthread_rwlock_t * rwlock);? ?
? ? ? ? 3)以讀方式請求加鎖:pthread_rwlock_rdlock
? ? ? ? ? ? ? ??int pthread_rwlock_rdlock(pthread_rwlock_t * rwlock);? ?
? ? ? ? 4)以寫方式請求加鎖:pthread_rwlock_rdlock
? ? ? ? ? ? ? ??int pthread_rwlock_wrlock(pthread_rwlock_t * rwlock);? ??
? ? ? ? 5)解鎖:pthread_rwlock_unlock
? ? ? ? ? ? ? ?int pthread_rwlock_unlock(pthread_rwlock_t * rwlock);? ?
? ? ? ? 6)非阻塞請求讀鎖:pthread_rwlock_tryrdlock
? ? ? ? ? ? ? ? int pthread_rwlock_tryrdlock(pthread_rwlock_t * rwlock);?
? ? ? ? 7)非阻塞請求寫鎖:pthread_rwlock_trywrlock
? ? ? ? ? ? ? ? int pthread_rwlock_trywrock(pthread_rwlock_t * rwlock);?
(3)讀寫鎖示例:多個線程對同一全局數(shù)據(jù)進行讀寫操作
? ? ? ? ? ? ? ? ??
? ? ? ? ? ?
總結
以上是生活随笔為你收集整理的linux操作系统之读写锁的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: antd react date-pick
- 下一篇: 成都大熊猫繁育研究基地建议游玩时长
