多线程代码示例

2018-06-01  本文已影响7人  JimmyL

1、

dispatch_queue_t queue = dispatch_queue_create("shddj", DISPATCH_QUEUE_SERIAL);
dispatch_async(queue, ^{
    NSLog(@"1");
    dispatch_sync(queue, ^{
        NSLog(@"2");
    });
    NSLog(@"3");
});

生成一个串行队列,队列中的block按照先进先出(FIFO)的顺序去执行,实际上为单线程执行。第一个block异步添加到穿行队列,先打印 “1”,然后同步向串行队列添加第二个block,造成线程阻塞,即死锁,程序崩溃;

2、

dispatch_queue_t queue = dispatch_queue_create("concurrent_queue", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue, ^{
    NSLog(@"1");
    dispatch_sync(queue, ^{
        NSLog(@"2");
    });
    NSLog(@"3");
});
NSLog(@"4");
while (1) { }
NSLog(@"5");

生成一个并发队列,并异步添加最外层block到并发队列,主线程在添加完继续执行 NSLog(@"4"),因为 NSLog(@"2") 是同步任务,要在执行完 NSLog(@"2") 采取执行 NSLog(@"3");

上一篇下一篇

猜你喜欢

热点阅读