Linux系統編程-(pthread)線程通信(讀寫鎖)

      網友投稿 748 2025-03-31

      1. 讀寫鎖介紹

      讀寫鎖與互斥鎖類似,讀寫鎖比互斥鎖有更高的并行性,讀寫鎖特點如下:

      1. 讀寫鎖有三種狀態,讀模式下加鎖(共享)、寫模式下加鎖(獨占)以及不加鎖。

      2. 一次只有一個線程可以占有寫模式下的讀寫鎖;但是多個線程可以同時占有讀模式下的讀寫鎖。

      3. 讀寫鎖在寫加鎖狀態時,其他試圖以寫狀態加鎖的線程都會被阻塞。讀寫鎖在讀加鎖狀態時,如果有線程希望以寫模式加鎖時,必須阻塞,直到所有線程釋放鎖。

      4. 當讀寫鎖以讀模式加鎖時,如果有線程試圖以寫模式對其加鎖,那么讀寫鎖會阻塞隨后的讀模式鎖請求,以避免讀鎖長期占用,而寫鎖得不到請求。

      讀寫鎖總結:

      讀寫鎖分為讀鎖和寫鎖。

      如果資源被讀寫鎖保護,多個線程可以同時獲取讀鎖—也就是讀支持多個線程同時讀。

      資源加了寫鎖之后,在寫資源的時候只能被一個線程占用,其他讀鎖就會阻塞。

      讀鎖和寫鎖也是互斥的關系。讀的時候不能寫,寫的時候不能讀。

      但是讀的時候可以支持多個線程同時讀,寫的時候只能被一個線程寫,其他線程也不能讀。

      2. 讀寫鎖相關函數

      Linux系統編程-(pthread)線程通信(讀寫鎖)

      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 #include #include #include #include #include #include #include #include pthread_rwlock_t rwlock; int data; /* 線程工作函數 */ void *thread_work_func(void *dev) { while(1) { pthread_rwlock_rdlock(&rwlock); //讀加鎖 printf("data=%d\n",data); pthread_rwlock_unlock(&rwlock); //解鎖 sleep(1); } } /* 線程工作函數 */ void *thread_work_func2(void *dev) { while(1) { pthread_rwlock_wrlock(&rwlock); //寫加鎖 data++; pthread_rwlock_unlock(&rwlock); //解鎖 sleep(1); } } int main(int argc,char **argv) { //初始化讀寫鎖 pthread_rwlock_init(&rwlock,NULL); /*1. 創建子線程1*/ pthread_t thread_id; if(pthread_create(&thread_id,NULL,thread_work_func,NULL)!=0) { printf("子線程1創建失敗.\n"); return -1; } /*2. 創建子線程2*/ pthread_t thread_id2; if(pthread_create(&thread_id2,NULL,thread_work_func2,NULL)!=0) { printf("子線程2創建失敗.\n"); return -1; } /*3. 等待線程的介紹*/ pthread_join(thread_id,NULL); pthread_join(thread_id2,NULL); //銷毀讀寫鎖 pthread_rwlock_destroy(&rwlock); return 0; }

      linux 任務調度

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:華為襄陽云計算數據中心
      下一篇:excel怎么篩選求和 快速篩選求和方式一覽
      相關文章
      国产偷国产偷亚洲高清日韩| 亚洲视频在线一区二区| 亚洲人成网www| 亚洲动漫精品无码av天堂| 亚洲永久无码3D动漫一区| 国产AV无码专区亚洲AV手机麻豆| 亚洲?V乱码久久精品蜜桃| 丁香亚洲综合五月天婷婷| 婷婷亚洲综合五月天小说在线| 久久久久久亚洲精品无码| 亚洲av无码专区在线电影| 大桥未久亚洲无av码在线| 亚洲av成人片在线观看| 在线观看亚洲专区| 国产精品亚洲а∨无码播放不卡 | 亚洲毛片在线免费观看| 亚洲综合久久成人69| 亚洲最大在线观看| 亚洲国产精品线观看不卡| 色在线亚洲视频www| 亚洲精品国产首次亮相| 国产AV无码专区亚洲AV麻豆丫| 国产亚洲男人的天堂在线观看 | 亚洲精品99久久久久中文字幕| 亚洲一区无码精品色| 亚洲精品午夜无码专区| 久久久无码精品亚洲日韩蜜桃| 亚洲日本在线看片| 亚洲剧情在线观看| 亚洲国产精品无码久久九九大片| 在线观看亚洲专区| 久久久久亚洲?V成人无码| 亚洲色中文字幕无码AV| 亚洲一区二区三区日本久久九| 亚洲精品乱码久久久久久下载| 亚洲国产乱码最新视频| 亚洲а∨精品天堂在线| 亚洲无码高清在线观看| 亚洲AV无码一区二区三区DV| 亚洲最新视频在线观看| 亚洲成a人片在线看|