亞寵展、全球寵物產業風向標——亞洲寵物展覽會深度解析
748
2025-03-31
1. 讀寫鎖介紹
讀寫鎖與互斥鎖類似,讀寫鎖比互斥鎖有更高的并行性,讀寫鎖特點如下:
1. 讀寫鎖有三種狀態,讀模式下加鎖(共享)、寫模式下加鎖(獨占)以及不加鎖。
2. 一次只有一個線程可以占有寫模式下的讀寫鎖;但是多個線程可以同時占有讀模式下的讀寫鎖。
3. 讀寫鎖在寫加鎖狀態時,其他試圖以寫狀態加鎖的線程都會被阻塞。讀寫鎖在讀加鎖狀態時,如果有線程希望以寫模式加鎖時,必須阻塞,直到所有線程釋放鎖。
4. 當讀寫鎖以讀模式加鎖時,如果有線程試圖以寫模式對其加鎖,那么讀寫鎖會阻塞隨后的讀模式鎖請求,以避免讀鎖長期占用,而寫鎖得不到請求。
讀寫鎖總結:
讀寫鎖分為讀鎖和寫鎖。
如果資源被讀寫鎖保護,多個線程可以同時獲取讀鎖—也就是讀支持多個線程同時讀。
資源加了寫鎖之后,在寫資源的時候只能被一個線程占用,其他讀鎖就會阻塞。
讀鎖和寫鎖也是互斥的關系。讀的時候不能寫,寫的時候不能讀。
但是讀的時候可以支持多個線程同時讀,寫的時候只能被一個線程寫,其他線程也不能讀。
2. 讀寫鎖相關函數
1. 讀寫鎖初始化 int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr); 2. 讀模式加鎖 int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock); int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock); 3. 寫模式加鎖 int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock); int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock); 4. 解鎖 int pthread_rwlock_unlock(pthread_rwlock_t *rwlock); 5. 銷毀讀寫鎖 int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
3.案例代碼: 讀寫鎖使用模型
下面代碼使用讀寫多保護一個全局變量的讀寫。
#include
linux 任務調度
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。