扬庆の博客

多线程之栅栏函数

字数统计: 216阅读时长: 1 min
2022/03/24 Share

多线程-栅栏函数

dispatch_barrier_async

  • 使用实例

使用GCD实现多读单写?

多个读者同时读取数据, 而在读的时候不能写入数据。并且,在写的过程中,不能有其他写者去写。即读者之间是并发的,写着与读者或其他写者是互斥的。

这里的写处理,就是通过栅栏的形式去写。 可以用dispatch_barrier_sync(栅栏函数)实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.

dispatch_queue_t concurrentQueue = dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT);

for (NSInteger i = 0; i < 10; i++) {

dispatch_async(concurrentQueue, ^{
NSLog(@"%zd",i);
});
}

dispatch_barrier_sync(concurrentQueue, ^{
NSLog(@"barrier");
});

for(NSInteger i = 10; i < 20; i++) {
dispatch_sync(concurrentQueue, ^{
NSLog(@"%zd",i);
});
}

}


并发先异步执行0-10,
栅栏函数隔开和10-20的任务
执行栅栏函数
同步执行10-20

barrier

CATALOG
  1. 1. 多线程-栅栏函数