天天看點

Linux系統程式設計40:多線程之基于環形隊列的生産者與消費者模型

文章目錄

    • (1)什麼是信号量
    • (2)與信号量相關的操作
    • (3)基于環形隊列的生産者與消費者模型-信号量(單消費者單生産者)

(1)什麼是信号量

前面的叙述中,我們通過鎖保證了每次隻有一個線程進入臨界區,但是臨界區資源很多也很大,每次隻允許一個線程進入往往會使效率很低。是以如果将臨界區劃分為多個獨立的區域,劃分為多少個區域就讓多少個線程進入,,但是這樣就同時帶來了一個問題——如果劃分為了5個區域,但是同時進入了10個線程該怎麼辦?是以這一點可以通過信号量解決。信号量可以了解為一個計數器,它用來描述臨界資源的有效個數

信号量由一個值和一個指針組成,指針指向等待該信号量的線程。信号量的值表示相應資源的使用情況,比如如果S>=0表示資源夠用,如果執行P操作表示請求配置設定一個資源,那麼S就會減一;當S<0時表示已經沒有可用資源(此時S的絕對值表示等待該資源的線程數)請求者必須等待其他線程釋放資源方可繼續運作。如果執行一個V操作就表示會釋放一個資源,是以S加一

(2)與信号量相關的操作

1:要使用信号量就需要建立一個

sem_t

類型變量

繼續閱讀