dispatch_semaphore (信號(hào)量)的使用姿勢(shì)

dispatch_semaphore簡(jiǎn)單來(lái)說(shuō)就是控制訪問(wèn)資源的數(shù)量,比如系統(tǒng)有兩個(gè)資源可以被利用,同時(shí)有三個(gè)線程要訪問(wèn),只能允許兩個(gè)線程訪問(wèn),第三個(gè)應(yīng)當(dāng)?shù)却Y源被釋放后再訪問(wèn),這時(shí)候就可以用dispatch_semaphore。

注意:再GCD中,只有調(diào)度的線程在信號(hào)量不足的時(shí)候才會(huì)進(jìn)入內(nèi)核態(tài)進(jìn)行線程阻塞

有關(guān)于dispatch_semaphore的3個(gè)函數(shù)
1.創(chuàng)建一個(gè)信號(hào)量(內(nèi)部參數(shù)為最大的信號(hào)計(jì)數(shù))

dispatch_semaphore_t semaphore = dispatch_semaphore_create(long value)

2.提高信號(hào)量
dispatch_semaphore_signal(semaphore)
3.等待降低信號(hào)量 (后面一個(gè)為當(dāng)前信號(hào)量不足時(shí) 等待的時(shí)間 一般寫 DISPATCH_TIME_FOREVER)

dispatch_semaphore_wait(<#dispatch_semaphore_t dsema#>, <#dispatch_time_t timeout#>)

使用方法


控制臺(tái)打印為



當(dāng)最大信號(hào)量為1的時(shí)候 我們可以看到當(dāng)前只允許一個(gè)線程進(jìn)行訪問(wèn) 其余線程必須等待.

maxSignal為2時(shí)


總結(jié):

dispatch_semaphore_signal是發(fā)送一個(gè)信號(hào),自然會(huì)讓信號(hào)總量加1 dispatch_semaphore_wait等待信號(hào),當(dāng)信號(hào)總量少于0的時(shí)候就會(huì)一直等待,否則就可以正常的執(zhí)行,并讓信號(hào)總量-1,根據(jù)這樣的原理,我們便可以快速的創(chuàng)建一個(gè)并發(fā)控制來(lái)同步任務(wù)和有限資源訪問(wèn)控制, 也可以保證線程安全.

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

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

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