线程安全2

【iOS】线程安全的文件读写

通过GCD中的dispatch_barrier_(a)sync加强对sync中所谓等待的理解

线程安全的另外一种方法,不用加锁,使用队列。

队列有个特点,先进先出。不过同步还是异步,添加任务的顺序是不变的。

队列实现线程安全举例:图书馆借书还书线程安全。

借书:应该是异步的
还书:也是异步的。
问题:怎么保证异步借书保证线程安全,不会同时借了同一本书;

dispatch_queue_t queue = dispatch_queue_create("qcdSafe.test", DISPATCH_QUEUE_CONCURRENT);

- (void)takeBook:(int)book {
    
    dispatch_barrier_async(queue, ^{
        [self.arr removeObject:@(book)];
    });
}

- (void)returnBook:(int)book {
    dispatch_async(queue, ^{
        [self.arr addObject:@(book)];
    });
}


使用队列,使用dispatch_barrier_async函数,这个函数会等待所有改任务之前的任务执行完之后才执行,并且之后的任务必须等改任务执行完才会去执行。

使用队列,主要原因就是任务有先后顺序。

你可能感兴趣的:(线程安全2)