????5??dispatch_semaphore_t ????????????
???????????ж???????????????????????????????????????????????????????????е?????????????NSOperationQueue???????maxConcurrentOperationCount?????????GCD?п??????semaphore??????????????3????????dispatch_semaphore_create???????semaphore??dispatch_semaphore_wait????????????????????0????????????????????????????У????????????-1??dispatch_semaphore_signal????????????????????????????1???????С?????
- (void)test7
{
_semaphore = dispatch_semaphore_create(2);
[self task7_1];
[self task7_2];
[self task7_3];
[self task7_4];
}
- (void)task7_1
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT?? 0)?? ^{
dispatch_semaphore_wait(_semaphore?? DISPATCH_TIME_FOREVER);
NSLog(@"7_1_begin");
sleep(4);
NSLog(@"7_1_end");
dispatch_semaphore_signal(_semaphore);
});
}
- (void)task7_2
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT?? 0)?? ^{
dispatch_semaphore_wait(_semaphore?? DISPATCH_TIME_FOREVER);
NSLog(@"7_2_begin");
sleep(4);
NSLog(@"7_2_end");
dispatch_semaphore_signal(_semaphore);
});
}
- (void)task7_3
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT?? 0)?? ^{
dispatch_semaphore_wait(_semaphore?? DISPATCH_TIME_FOREVER);
NSLog(@"7_3_begin");
sleep(4);
NSLog(@"7_3_end");
dispatch_semaphore_signal(_semaphore);
});
}
- (void)task7_4
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT?? 0)?? ^{
dispatch_semaphore_wait(_semaphore?? DISPATCH_TIME_FOREVER);
NSLog(@"7_4_begin");
sleep(4);
NSLog(@"7_4_end");
dispatch_semaphore_signal(_semaphore);
});
}
??????н????
????semaphore ? 1
????2016-03-11 16:33:11.957 GCDSample[22394:2943718] 7_1_begin
????2016-03-11 16:33:15.959 GCDSample[22394:2943718] 7_1_end
????2016-03-11 16:33:15.960 GCDSample[22394:2943717] 7_2_begin
????2016-03-11 16:33:19.964 GCDSample[22394:2943717] 7_2_end
????2016-03-11 16:33:19.965 GCDSample[22394:2943721] 7_3_begin
????2016-03-11 16:33:23.970 GCDSample[22394:2943721] 7_3_end
????2016-03-11 16:33:23.970 GCDSample[22394:2943727] 7_4_begin
????2016-03-11 16:33:27.975 GCDSample[22394:2943727] 7_4_end
????------- ------- ------- ------- ------- ------- ------- ----
????semaphore ? 2
????2016-03-11 16:33:47.396 GCDSample[22406:2944975] 7_2_begin
????2016-03-11 16:33:47.396 GCDSample[22406:2944974] 7_1_begin
????2016-03-11 16:33:51.398 GCDSample[22406:2944975] 7_2_end
????2016-03-11 16:33:51.398 GCDSample[22406:2944974] 7_1_end
????2016-03-11 16:33:51.398 GCDSample[22406:2944976] 7_3_begin
????2016-03-11 16:33:51.398 GCDSample[22406:2944983] 7_4_begin
????2016-03-11 16:33:55.401 GCDSample[22406:2944976] 7_3_end
????2016-03-11 16:33:55.401 GCDSample[22406:2944983] 7_4_end
??????????????????????????????????_semaphore = dispatch_semaphore_create(2);?????????????1???Ч???????д??ж??С?
????6??dispatch_set_target_queue ????????????
????????д??ж???A????ж???B??????A?м???????1??????B?м???????2??????3????????1??2??3????????????????dispatch_set_target_queue??????е??????????????AB????????C???????123????????ж???C???????С????????£?
- (void)test8
{
dispatch_queue_t serialQueue = dispatch_queue_create("com.starming.gcddemo.serialqueue"?? DISPATCH_QUEUE_SERIAL);
dispatch_queue_t firstQueue = dispatch_queue_create("com.starming.gcddemo.firstqueue"?? DISPATCH_QUEUE_SERIAL);
dispatch_queue_t secondQueue = dispatch_queue_create("com.starming.gcddemo.secondqueue"?? DISPATCH_QUEUE_CONCURRENT);
dispatch_set_target_queue(firstQueue?? serialQueue);
dispatch_set_target_queue(secondQueue?? serialQueue);
dispatch_async(firstQueue?? ^{
NSLog(@"1 %@"??[NSThread currentThread]);
[NSThread sleepForTimeInterval:3.f];
});
dispatch_async(secondQueue?? ^{
NSLog(@"2 %@"??[NSThread currentThread]);
[NSThread sleepForTimeInterval:2.f];
});
dispatch_async(secondQueue?? ^{
NSLog(@"3 %@"??[NSThread currentThread]);
[NSThread sleepForTimeInterval:1.f];
});
}
??????н????
????2016-03-11 17:31:41.515 GCDSample[1202:730942] 1 <NSThread: 0x170078340>{number = 2?? name = (null)}
????2016-03-11 17:31:44.518 GCDSample[1202:730942] 2 <NSThread: 0x170078340>{number = 2?? name = (null)}
????2016-03-11 17:31:46.520 GCDSample[1202:730942] 3 <NSThread: 0x170078340>{number = 2?? name = (null)}
????δ???????Have fun!