需求:
假設(shè)現(xiàn)在系統(tǒng)有兩個空閑資源可以被利用勾习,但同一時間卻有三個線程要進(jìn)行訪問,這種情況下該如何處理呢煎娇?
或者
我們要下載很多圖片,并發(fā)異步進(jìn)行贪染,每個下載都會開辟一個新的線程缓呛,可是我們又擔(dān)心太多線程肯定cpu吃不消,那么我們這里改怎么處理呢杭隙?
使用信號量可以滿足于上面所敘述的需求哟绊,使用信號量控制最大開辟線程數(shù)。
定義:
1.信號量:就是一種可用來控制訪問資源的數(shù)量的標(biāo)示痰憎,設(shè)定了一個信號量票髓,在線程訪問之前加上信號量的處理,則可告知系統(tǒng)按照我們指定的信號量數(shù)量來執(zhí)行多個線程铣耘。
其實洽沟,這有些類似鎖機(jī)制了,只不過信號量都是系統(tǒng)幫助我們處理蜗细,我們只需要之執(zhí)行線程之前裆操,設(shè)定一個信號量值怒详,并在使用時,加上信號量處理方法就行踪区。
2.信號量主要有3個函數(shù)昆烁,分別是:
//創(chuàng)建信號量,參數(shù):信號的初值朽缴,如果小于0則會返回NULL
dispatch_semaphore_create (信號量值)
//等待 降低信號量
dispatch_semaphore_wait (信號量善玫,等待時間)
//提高信號量
dispatch_semaphore_signal (信號量)
注意,正常的使用順序是先降低然后在提高密强,這兩個函數(shù)通常成隊使用茅郎。
使用 【iOS】異步并發(fā)多任務(wù) 任務(wù)執(zhí)行結(jié)束統(tǒng)一處理 (控制并發(fā)量)