dispatch_semaphore (信号量)的使用姿势

dispatch_semaphore简单来说就是控制访问资源的数量,比如系统有两个资源可以被利用,同时有三个线程要访问,只能允许两个线程访问,第三个应当等待资源被释放后再访问,这时候就可以用dispatch_semaphore

注意:再GCD中,只有调度的线程在信号量不足的时候才会进入内核态进行线程阻塞

有关于dispatch_semaphore的3个函数
1.创建一个信号量(内部参数为最大的信号计数)

dispatch_semaphore_t semaphore = dispatch_semaphore_create(long value)

2.提高信号量
dispatch_semaphore_signal(semaphore)
3.等待降低信号量 (后面一个为当前信号量不足时 等待的时间 一般写 DISPATCH_TIME_FOREVER)

dispatch_semaphore_wait(<#dispatch_semaphore_t dsema#>, <#dispatch_time_t timeout#>)

使用方法

744065-4e837a473fe80c56.png

控制台打印为

744065-d5b87f16c921cf45.png

当最大信号量为1的时候 我们可以看到当前只允许一个线程进行访问 其余线程必须等待.

maxSignal为2时

744065-c647315f6702d209.png

总结:

dispatch_semaphore_signal是发送一个信号,自然会让信号总量加1 dispatch_semaphore_wait等待信号,当信号总量少于0的时候就会一直等待,否则就可以正常的执行,并让信号总量-1,根据这样的原理,我们便可以快速的创建一个并发控制来同步任务和有限资源访问控制, 也可以保证线程安全.

推荐阅读更多精彩内容