定義了兩個(gè)變量和三個(gè)函數(shù) 要求func1循環(huán)n1次 func2循環(huán)n2次 之后調(diào)用func3.
如果能在一個(gè)異步函數(shù)中實(shí)現(xiàn),額外加分
int n1 = arc4random() % 1000;
int n2 = arc4random() % 1000;
- (void)func1 {
self.count++;
}
- (void)func2 {
self.count--;
}
- (void)func3 {
NSLog(@"a%d %d", __LINE__ ,self.count);
}
因?yàn)楹镁脹](méi)碰iOS了稀拐,及其生疏 居然腦袋里一片空白 這明擺著dispatch_group啊
害,gcd組太好實(shí)現(xiàn)了丹弱,就不說(shuō)了 看下怎么在一個(gè)異步函數(shù)中實(shí)現(xiàn)吧
其實(shí)用到了信號(hào)量 德撬,用信號(hào)量來(lái)攔截前兩個(gè)異步任務(wù) 信號(hào)量恢復(fù)0后再去執(zhí)行func3,重點(diǎn)其實(shí)在于第三個(gè)函數(shù)前的兩個(gè)wait函數(shù) 一定要wait兩次躲胳,才能攔截兩個(gè)異步任務(wù)蜓洪。
大膽猜測(cè)一下泛鸟,系統(tǒng)的gcd組應(yīng)該用的也是信號(hào)量吧 哈哈哈
dispatch_semaphore_t seam = dispatch_semaphore_create(2);
dispatch_queue_t queue = dispatch_queue_create("lion", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(dispatch_get_main_queue(), ^{
dispatch_semaphore_wait(seam, DISPATCH_TIME_FOREVER);
dispatch_async(queue, ^{
for (int i =0; i<n1; i++) {
[self func1];
NSLog(@"n1: %d", i);
}
dispatch_semaphore_signal(seam);
});
dispatch_semaphore_wait(seam, DISPATCH_TIME_FOREVER);
dispatch_async(queue, ^{
for (int i = 0; i < n2; i++) {
[self func2];
NSLog(@"n2: %d", i);
}
dispatch_semaphore_signal(seam);
});
dispatch_semaphore_wait(seam, DISPATCH_TIME_FOREVER);
dispatch_semaphore_wait(seam, DISPATCH_TIME_FOREVER);
[self func3];
dispatch_semaphore_signal(seam);
dispatch_semaphore_signal(seam);
});