(1)讀寫鎖:只有一把鎖,但是有兩種狀態(讀,寫)
? ? ? ? ? ? ?1)讀寫鎖的三種狀態:讀鎖,寫鎖,不加鎖
? ? ? ? ? ? ?2)讀寫鎖特性(12字):寫鎖優先級高,寫獨占,讀共享
? ? ? ? ? ? ? ? ? ? 1>寫模式加鎖時,解鎖前,所有對該線程加鎖的線程都會被阻塞。
? ? ? ? ? ? ? ? ? ? 2>讀模式加鎖時,如果線程是讀加鎖則成功,如果線程是寫加鎖會阻塞。
? ? ? ? ? ? ? ? ? ?3>讀鎖、寫鎖并行阻塞時,寫鎖優先級高,即解鎖后優先執行寫鎖操作。
? ? ? ? ? ?3)讀寫鎖非常適合對數據讀的次數比寫的次數多。
(2)讀寫鎖函數:成功返回0,失敗直接返回錯誤號。
? ? ? ? ? ? ? ? ? pthread_rwlock_t類型 用于定義一個讀寫鎖變量
? ? ? ? ? 1)pthread_rwlock_init:初始化一把讀寫鎖
? ? ? ? ? ? ? ? int pthread_rwolck_init(pthread_rwlock_t*restrict rwlock,const pthread_rwlockattr_t*restrict attr);? ??
? ? ? ? ? ? ? ?restrict關鍵字:只用于限制指針,所有修改該指針指向內存中內容的操作,只能通過本指針來完成,不能通過除本指針之外的其它變量或指針修改。
? ? ? ? ? ? ? 參數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)讀寫鎖示例:多個線程對同一全局數據進行讀寫操作
? ? ? ? ? ? ? ? ??
? ? ? ? ? ?