- 1.dispatch_group 調(diào)度組
- 2.dispatch_barrier 柵欄塊
- 3.dispatch_semaphore 信號量
dispatch_group 線程組
-分別執(zhí)行2個耗時的異步操作苛茂,等2個異步操作都執(zhí)行完畢后在回到主線程執(zhí)行操作,比如下載文件
-關(guān)鍵代碼:
1.dispatch_group_notify任務(wù)執(zhí)行完后的通知
2.dispatch_group_wait阻塞當(dāng)前線程绑嘹,等上面任務(wù)全部執(zhí)行完后,才會繼續(xù)
3.dispatch_group_enter 相當(dāng)于 group 中未執(zhí)行完畢任務(wù)數(shù) +1
4.dispatch_group_leave 相當(dāng)于 group 中未執(zhí)行完畢任務(wù)數(shù) -1
dispatch_barrier 柵欄快
-在兩個操作組間形成柵欄,第一組操作執(zhí)行完之后窒舟,才能開始執(zhí)行第二組操作
-關(guān)鍵代碼:dispatch_barrier_async
dispatch_semaphore信號量
-計數(shù)小于 0 時等待嘲驾,不可通過淌哟。計數(shù)為 0 或大于 0 時,計數(shù)減 1 且不等待辽故,可通過
Eg:異步執(zhí)行 將 任務(wù) 1 追加到隊列之后徒仓,不做等待,接著執(zhí)行 dispatch_semaphore_wait 方法誊垢,semaphore 減 1掉弛,成為-1,進(jìn)入等待狀態(tài)喂走。等任務(wù)1執(zhí)行完并dispatch_semaphore_signal信號量+1后殃饿,等待中的線程才會繼續(xù)執(zhí)行
-關(guān)鍵代碼:
1.dispatch_semaphore_create:創(chuàng)建一個 Semaphore 并初始化信號的總量
2.dispatch_semaphore_signal:發(fā)送一個信號,讓信號總量加 1
3.dispatch_semaphore_wait:可以使總信號量減 1芋肠,信號總量小于 0 時就會一直等待(阻塞所在線程)壁晒,否則就可以正常執(zhí)行。
Dispatch Semaphore 線程安全和線程同步(為線程加鎖)
eg:兩個窗口同時出售去成都的票,賣完為止
方法:某個窗口賣的時候秒咐,信號量-1谬晕,賣出去后信號量+1,信號總量小于0携取,就能避免另一個窗口賣票T芮!