码迷,mamicode.com
首页 > 其他好文 > 详细

GCD信号量机制

时间:2019-09-02 17:04:40      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:初始   循环   size   main   priority   线程   efault   dispatch   线程同步   

1.创建信号量,创建的初始值决定线程并发数

dispatch_semaphore_t semaphore = dispatch_semaphore_create(2); 

2.等待信号

dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); 

// 由于是异步执行的,所以每次循环Block里面的dispatch_semaphore_signal根本还没有执行就会执行dispatch_semaphore_wait,从而semaphore-1.当循环10此后,semaphore等于0,则会阻塞线程,直到执行了Block的dispatch_semaphore_signal 才会继续执行

3.发信号,信号量值会加1

dispatch_semaphore_signal(semaphore);

4.信号量可使多个异步线程同步执行

    dispatch_semaphore_t semaphore1 = dispatch_semaphore_create(0);

    dispatch_semaphore_t semaphore2 = dispatch_semaphore_create(0);

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

            NSLog(@"thread 2");

            sleep(2);

            dispatch_semaphore_signal(semaphore2);

        });

        dispatch_semaphore_wait(semaphore2, DISPATCH_TIME_FOREVER);

        NSLog(@"thread 1");

        sleep(2);

        dispatch_semaphore_signal(semaphore1);

    });

    dispatch_semaphore_wait(semaphore1, DISPATCH_TIME_FOREVER);

    NSLog(@"main thread");

 

GCD信号量机制

标签:初始   循环   size   main   priority   线程   efault   dispatch   线程同步   

原文地址:https://www.cnblogs.com/zhengweifang/p/11447340.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!