GCD semaphore信号量

2018-05-17  本文已影响41人  iOS坚持者

dispatch_semaphore_create :

查看文档 发现只有三个 API:

创建semaphore

long count = 1;
dispatch_semaphore_t lock = dispatch_semaphore_create(count);
传入的信号量参数count必须大于或者等于0,否则lock为Null,可以把信号量count理解为支持的最大并发线程个数

注意,当lock为成员变量或属性时,有线程在等待执行的话,根据超时时间self 会延迟或者永远(DISPATCH_TIME_FOREVER)不会释放。

等待信号

long wait = dispatch_semaphore_wait(lock, 
              dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)));
第二个参数为等待的时间,这里是等待2秒。
执行这个API会判断当前的信号量count是否大于0,大于0则继续执行,并且信号量count-1,否则等待超时时间或信号量+1。

发信号

long signal = dispatch_semaphore_signal(lock);
信号量count+1;返回值=0,表示没有任务在等待执行,否则表示有任务在等待执行。(当线程有优先级时,唤醒优先级最高的线程;否则随机唤醒)
上一篇 下一篇

猜你喜欢

热点阅读