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)控制, 也可以保證線程安全.