iOS Developer

多线程同步的问题

2017-02-09  本文已影响30人  LeeDev

通过GCD 方式:把所有的多线程放到一个 串型队列中来跑

大概有下面几步 
1.创建一个串型队列 并且同时放到 全局队列中
NSString *identifier = @"com. identifier.serial" ;
 _queue = dispatch_queue_create([identifier UTF8String], DISPATCH_QUEUE_SERIAL);
dispatch_queue_t dQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
 //dQueue:目标队列   _queue:当前的队列是相对于dQueue
dispatch_set_target_queue(_queue, dQueue);


2.多线程同步 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
       dispatch_sync(_queue, ^{
         //同步执行 某个线程1
      });
    });

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
       dispatch_sync(_queue, ^{
         //同步执行 某个线程2
      });
    });
// 这样 线程1 和 线程2 是同步执行的

通过NSOperationQueue开发 (解决GCD 中没有 cancel 的方法)

1.初始化Queue队列 
//设置最大的执行数是1
self.maxConcurrentOperationCount = 1;
//同步执行 
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:block];
        [self addOperations:@[operation] waitUntilFinished:YES];
//取消所有的操作  cancelAllOperations

上一篇 下一篇

猜你喜欢

热点阅读