對于資源競爭,使用GCD的信號量能夠很好的處理之。
下面就上代碼:

屏幕快照 2017-06-16 下午3.09.58.png

屏幕快照 2017-06-16 下午3.10.16.png

屏幕快照 2017-06-16 下午3.10.35.png

屏幕快照 2017-06-16 下午3.10.58.png
主要涉及到這么三個函數(shù):
dispatch_semaphore_create 創(chuàng)建信號量,傳入的數(shù)字決定有多少個任務(wù)并行。1為串行
dispatch_semaphore_signal 信號量加1
dispatch_semaphore_wait 信號量減1,信號量為0時,阻塞當前線程等待timeout。
我們的幾個任務(wù):
1 停留1秒 超時時間:永久
2 停留3.5秒 超時時間:1秒
3 停留1秒 超時時間:永久
4 停留1秒 超時時間:永久
當我們的信號量為2時,也就是允許兩個線程并行時:

屏幕快照 2017-06-16 下午4.32.04.png
分析一下:
時間軸:第0秒
任務(wù)1,2 同時開始運行
時間軸:第1秒
任務(wù)1結(jié)束,喚醒任務(wù)3開始。
時間軸:第2秒
任務(wù)3結(jié)束,喚醒任務(wù)4開始。
時間軸:第3秒
任務(wù)4結(jié)束,未喚醒其他任務(wù)。
時間軸:第3.5秒
任務(wù)2結(jié)束,未喚醒其他任務(wù)。
加油~