最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

linux線程間的同步與互斥知識點總結(jié)

 更新時間:2019年11月12日 16:43:44   作者:Duikerdd  
在本篇文章里小編給大家整理的是關(guān)于linux線程間的同步與互斥的相關(guān)知識點,有興趣的朋友們學(xué)習(xí)下。

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

線程同步: 條件變量

為什么使用條件變量?

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

條件變量是什么?

是一種同步機制,一個線程用于修改這個變量使其滿足其它線程繼續(xù)往下執(zhí)行的條件,其它線程則接收條件已經(jīng)發(fā)生改變的信號。

條件變量操作?

初始化和銷毀

pthread_cond_wait

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

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

pthread_cond_signal 一對一喚醒   

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

pthread_cond_broadcast 廣播喚醒

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

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

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

為什么需要while循環(huán)判斷臨界資源是否存在?

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

singnal要先解鎖還是后解鎖?

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

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

線程互斥: 互斥鎖

為什么使用互斥鎖?

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

互斥鎖是什么?

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

互斥鎖操作?

初始化和銷毀

加鎖---如果計數(shù)為1,置0,進行需要的操作;如果計數(shù)為0,則阻塞等待計數(shù)變?yōu)?

解鎖---計數(shù)置為1

以上就是本次介紹的全部相關(guān)知識點,感謝大家的學(xué)習(xí)和對腳本之家的支持。

相關(guān)文章

  • CentOS 7 安裝 Jenkins過程詳解

    CentOS 7 安裝 Jenkins過程詳解

    這篇文章主要介紹了CentOS 7 安裝 Jenkins過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • linux 內(nèi)存清理/釋放命令總結(jié)

    linux 內(nèi)存清理/釋放命令總結(jié)

    本篇文章主要介紹了linux 內(nèi)存清理/釋放命令,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2016-11-11
  • ubuntu配置tftp服務(wù)的步驟小結(jié)

    ubuntu配置tftp服務(wù)的步驟小結(jié)

    這篇文章主要介紹了ubuntu配置tftp服務(wù)的步驟小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Linux通過匿名管道進行進程間通信

    Linux通過匿名管道進行進程間通信

    這篇文章主要介紹了Linux通過匿名管道進行進程間通信,介紹了什么是管道,popen函數(shù),pipe調(diào)用等相關(guān)內(nèi)容,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Apache?HTTP?安裝和配置下載詳解

    Apache?HTTP?安裝和配置下載詳解

    這篇文章主要介紹了Apache?HTTP?安裝和配置下載,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-12-12
  • Linux如何查看架構(gòu)和系統(tǒng)問題

    Linux如何查看架構(gòu)和系統(tǒng)問題

    在Linux系統(tǒng)上,可以使用`uname?-m`查看系統(tǒng)架構(gòu),使用`uname`查看內(nèi)核和操作系統(tǒng)信息,使用`/etc/os-release`和`lsb_release`查看系統(tǒng)詳細(xì)信息,使用`lscpu`、`lsblk`和`free?-h`查看硬件信息
    2025-03-03
  • Linux系統(tǒng)cpu飆高的排查方法

    Linux系統(tǒng)cpu飆高的排查方法

    本文介紹了如何在Linux系統(tǒng)中通過檢查CPU使用率、系統(tǒng)負(fù)載、進程資源、系統(tǒng)調(diào)用、日志分析以及使用性能工具如perf來診斷CPU占用過高的問題,幫助用戶定位和解決問題,需要的朋友可以參考下
    2024-10-10
  • Linux的路由表詳細(xì)介紹

    Linux的路由表詳細(xì)介紹

    這篇文章主要介紹了Linux的路由表詳細(xì)介紹的相關(guān)資料,希望通過本文大家能徹底了解Linux 路由表的知識,需要的朋友可以參考下
    2017-08-08
  • 關(guān)于Linux搭建RabbitMQ集群環(huán)境圖文詳解

    關(guān)于Linux搭建RabbitMQ集群環(huán)境圖文詳解

    這篇文章主要介紹了關(guān)于Linux搭建RabbitMQ集群環(huán)境圖文詳解,RabbitMQ天然支持集群,集群是保證可靠性的一種方式,同時可以通過水平擴展以達到增加消息吞吐量能力的目的,需要的朋友可以參考下
    2023-05-05
  • Linux命令詳解之less命令

    Linux命令詳解之less命令

    Linux下還有一個與more命令非常類似的命令--less命令,相比于more命令,less命令更加靈活強大一些,今天就給大家介紹下Linux下的less命令。
    2016-10-10

最新評論

武鸣县| 海阳市| 安徽省| 孝义市| 荥经县| 司法| 平定县| 集贤县| 长治县| 新田县| 抚松县| 南涧| 乐安县| 乌海市| 东丰县| 广德县| 漳浦县| 夏津县| 东丽区| 武平县| 东乡族自治县| 宜兰市| 黑河市| 合肥市| 和硕县| 徐闻县| 定安县| 浙江省| 白城市| 沽源县| 庄浪县| 阿拉善右旗| 宁都县| 外汇| 黄浦区| 青龙| 安康市| 迭部县| 革吉县| 仙桃市| 彩票|