成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

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

服務(wù)器

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

曲周網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司于2013年開始到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。

線程同步: 條件變量

為什么使用條件變量?

對臨界資源的時序可控性,條件滿足會通知其他等待操作臨界資源的線程,類似信號。 場景: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é)習和對創(chuàng)新互聯(lián)的支持。

新聞名稱:linux線程間的同步與互斥知識點總結(jié)
網(wǎng)站路徑:http://jinyejixie.com/article22/chchjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設(shè)、網(wǎng)站設(shè)計公司、做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)ChatGPT、全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設(shè)