-(void)dispatchSignal{
//crate的value表示,最多幾個資源可訪問
dispatch_semaphore_t semaphore = dispatch_semaphore_create(2);
dispatch_queue_t quene = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//任務1
dispatch_async(quene, ^{
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
NSLog(@"run task 1");
sleep(1);
NSLog(@"complete task 1");
dispatch_semaphore_signal(semaphore);
});<br>
//任務2
dispatch_async(quene, ^{
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
NSLog(@"run task 2");
sleep(1);
NSLog(@"complete task 2");
dispatch_semaphore_signal(semaphore);
});<br>
//任務3
dispatch_async(quene, ^{
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
NSLog(@"run task 3");
sleep(1);
NSLog(@"complete task 3");
dispatch_semaphore_signal(semaphore);
});
}
511196-20170111164237931-1818878873.png
總結:由于設定的信號值為2,先執行兩個線程,等執行完一個,才會繼續執行下一個,保證同一時間執行的線程數不超過2。
這里我們擴展一下,假設我們設定信號值=1
dispatch_semaphore_create(1)<br><br>
那么結果就是:
如果設定信號值=3
dispatch_semaphore_create(3)<br><br>
那么結果就是:
其實設定為3,就是不限制線程執行了,因為一共才只有3個線程。