婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > linux線程間的同步與互斥知識點總結

linux線程間的同步與互斥知識點總結

熱門標簽:外呼系統打哪顯哪 新科美甲店地圖標注 高德地圖標注論壇 北海市地圖標注app 湖北ai智能電銷機器人 AI電銷機器人 源碼 江西外呼系統 新邵電銷機器人企業 蘭州ai電銷機器人招商

在線程并發執行的時候,我們需要保證臨界資源的安全訪問,防止線程爭搶資源,造成數據二義性。

線程同步: 條件變量

為什么使用條件變量?

對臨界資源的時序可控性,條件滿足會通知其他等待操作臨界資源的線程,類似信號。 場景:T-DAY展會排隊參觀/生產者消費者模型

條件變量是什么?

是一種同步機制,一個線程用于修改這個變量使其滿足其它線程繼續往下執行的條件,其它線程則接收條件已經發生改變的信號。

條件變量操作?

初始化和銷毀

pthread_cond_wait

條件不滿足 會釋放鎖并阻塞等待 , 這個函數是原子性操作:1.將線程放入條件等待隊列 2.釋放鎖 

條件滿足 則線程會被喚醒并加鎖

pthread_cond_signal 一對一喚醒   

喚醒等待隊列中的一個線程

pthread_cond_broadcast 廣播喚醒

喚醒等待隊列中的全部線程 

為什么等待和解鎖需要原子操作/為什么條件變量要使用互斥鎖?

因為pthread_cond_wait中的鎖是為了保護條件變量,防止錯過信號,如果等待解鎖不是原子性操作,比如線程A先解鎖,此時CPU時間片切換到線程B,線程B加鎖并發送條件變量信號,此時再切換到線程A,線程A還來不及等待就錯過了信號,就可能會永久阻塞下去。所以,等待和解鎖必須是原子性操作。

為什么需要while循環判斷臨界資源是否存在?

在一對多的情況下,生產者發送一個信號,等待的線程被喚醒并加鎖,但是只有一個線程能加鎖,其他線程就會阻塞等待鎖,如果這個線程用完了臨界資源,其他線程不進行判斷就繼續往下走,是不合理的。

singnal要先解鎖還是后解鎖?

如果先解鎖,鎖被沒有阻塞等待的線程拿到了,再把臨界資源使用了,解鎖后的singal就沒意義了,也就是虛假喚醒;

先singal喚醒,再讓喚醒的線程爭搶鎖,在linux下,有兩個隊列,一個是cond_wait,一個是mutex_lock,singal只是讓cond_wait上的線程轉移到mutex_lock,不會返回用戶空間,這樣能提高效率。

線程互斥: 互斥鎖

為什么使用互斥鎖?

對臨界資源同時間唯一訪問,保護臨界資源防止修改。 場景:黃牛搶票

互斥鎖是什么?

是一個0/1計數器,1代表有資源能操作,0代表沒有資源可以操作。

互斥鎖操作?

初始化和銷毀

加鎖---如果計數為1,置0,進行需要的操作;如果計數為0,則阻塞等待計數變為1

解鎖---計數置為1

以上就是本次介紹的全部相關知識點,感謝大家的學習和對腳本之家的支持。

標簽:海南 南陽 自貢 黔東 池州 大理 阿克蘇 黃石

巨人網絡通訊聲明:本文標題《linux線程間的同步與互斥知識點總結》,本文關鍵詞  linux,線程,間的,同步,與,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《linux線程間的同步與互斥知識點總結》相關的同類信息!
  • 本頁收集關于linux線程間的同步與互斥知識點總結的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 冷水江市| 嘉荫县| 红原县| 乐山市| 东乡| 宜昌市| 灯塔市| 中宁县| 澄江县| 当涂县| 慈利县| 卢氏县| 子长县| 黄龙县| 天全县| 沂水县| 咸宁市| 扬州市| 华亭县| 新民市| 香河县| 枣强县| 聊城市| 砚山县| 武鸣县| 外汇| 离岛区| 建瓯市| 龙口市| 乌兰浩特市| 永德县| 江油市| 鹿邑县| 拉孜县| 贡觉县| 沛县| 汾西县| 米林县| 望奎县| 台北县| 马龙县|