三個需要掌握的同步工具之Semaphore(信號量)

1. 信號量Semaphore的介紹我們以一個停車場運(yùn)作為例來說明信號量的作用。假設(shè)停車場只有三個車位,一開始三個車位都是空的。這時如果同時來了三輛車,看門人允許其中它們進(jìn)入進(jìn)入,然后放下車攔。以后來的車必須在入口等待,直到停車場中有車輛離開。這時,如果有一輛車離開停車場,看門人得知后,打開車攔,放入一輛,如果又離開一輛,則又可以放入一輛,如此往復(fù)。?在這個停車場系統(tǒng)中,車位是公共資源,每輛車好比一個線程,看門人起的就是信號量的作用。信號量是一個非負(fù)整數(shù),表示了當(dāng)前公共資源的可用數(shù)目(在上面的例子中可以用空閑的停車位類比信號量),當(dāng)一個線程要使用公共資源時(在上面的例子中可以用車輛類比線程),首先要查看信號量,如果信號量的值大于1,則將其減1,然后去占有公共資源。如果信號量的值為0,則線程會將自己阻塞,直到有其它線程釋放公共資源。?在信號量上我們定義兩種操作: acquire(獲取) 和 release(釋放)。當(dāng)一個線程調(diào)用acquire操作時,它要么通過成功獲取信號量(信號量減1),要么一直等下去,直到有線程釋放信號量,或超時。release(釋放)實際上會將信號量的值加1,然后喚醒等待的線程。信號量主要用于兩個目的,一個是用于多個共享資源的互斥使用,另一個用于并發(fā)線程數(shù)的控制。?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容