只有一个区别,同步栅栏函数会阻塞当前线程,而一步栅栏函数不会阻塞当前线程,
如下
代码
- (void)testBarrier {
dispatch_queue_t concurrentQueue = dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT);
for (NSInteger i = 0; i < 10; i++) {
dispatch_sync(concurrentQueue, ^{
NSLog(@"%zd",i);
});
}
dispatch_barrier_sync(concurrentQueue, ^{
NSLog(@"barrier");
});
NSLog(@"哈哈哈哈当前线程当前线程当前线程");
for (NSInteger i = 10; i < 20; i++) {
dispatch_sync(concurrentQueue, ^{
NSLog(@"%zd",i);
});
}
}
log结果
0
1
2
3
4
5
6
7
8
9
barrier
哈哈哈哈当前线程当前线程当前线程
10
11
12
13
14
15
16
17
18
19
异步栅栏函数
- (void)testBarrier2 {
dispatch_queue_t concurrentQueue = dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT);
for (NSInteger i = 0; i < 10; i++) {
dispatch_sync(concurrentQueue, ^{
NSLog(@"%zd",i);
});
}
dispatch_barrier_async(concurrentQueue, ^{
NSLog(@"barrier");
});
NSLog(@"哈哈哈哈哈这里这里这里这里当前线程");
for (NSInteger i = 10; i < 20; i++) {
dispatch_sync(concurrentQueue, ^{
NSLog(@"%zd",i);
});
}
}
log结果
0
1
2
3
4
5
6
7
8
9
哈哈哈哈哈这里这里这里这里当前线程
barrier
10
11
12
13
14
15
16
17
18
19