单写就不说了,因为栅栏函数就是有这样的特性,需要等之前的block执行完毕,之后的block需要等栅栏函数执行完毕
但是我们使用dispatch_syn的同步方法,为什么能达到多读的效果呢,就是因为,我们所说的同步执行,是指在同一线程里面来说的,当在多个线程中的时候,就没有同步的概念了
我们通过以下代码进行验证
- (void)textSycMutilThread
{
dispatch_queue_t concurrentQueue = dispatch_queue_create("testkkk", DISPATCH_QUEUE_CONCURRENT);
dispatch_queue_t concurrentQueue3 = dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(concurrentQueue, ^{
dispatch_sync(concurrentQueue3, ^{
NSLog(@"111111");
sleep(10);
NSLog(@"2222222");
});
dispatch_sync(concurrentQueue3, ^{
NSLog(@"33333");
sleep(10);
NSLog(@"444444");
});
});
dispatch_async(concurrentQueue, ^{
dispatch_sync(concurrentQueue3, ^{
NSLog(@"55555");
sleep(10);
NSLog(@"666666");
});
});
}
结果输出
111111
55555
666666
2222222
33333
444444
由此可见,在多线程中,syn并不能达到同步的效果