美文网首页
线程安全2

线程安全2

作者: xiari1991 | 来源:发表于2018-02-08 10:55 被阅读7次

    【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

          本文链接:https://www.haomeiwen.com/subject/yjazzxtx.html