usr/include/dispatch - samephore.h
可以参考 这里
#import<semaphore.h>
一、dispatch_samephore_t###
DISPATCH_DECL(dispatch_semaphore);
通过宏声明一个dispatch_object的基类dispatch_semaphore —— 信号量
信号量,控制线程访问资源的数量,1个公共资源被三个线程访问,每次只允许一个线程访问,剩下的等待访问的线程被释放掉才可以访问。
二、dispatch_samephore_t的三个API###
1.dispatch_semaphore_create####
dispatch_semaphore_t
dispatch_semaphore_create(long value);
摘要:
创建信号量,value是信号量的初值。value需要大于等于0,否则信号量为空。
2.dispatch_semaphore_wait####
long
dispatch_semaphore_wait(dispatch_semaphore_t dsema, dispatch_time_t timeout);
信号量减1。当信号量值小于0时,等待信号量函数不会堵塞线程。
- dsema:目标信号量。
- timeout:dispatch_time单位,设置等待超时的时间。
- return:减弱信号量成功返回0,失败或超时返回非0。
3.dispatch_semaphore_signal####
long
dispatch_semaphore_signal(dispatch_semaphore_t dsema);
信号量加1。当信号量小于0时,发送信号量函数在加1之后之后唤醒一个等待的线程。
- dsema:一个目标计数器信号量,NULL时候就是未定义的。
- return:如果成功唤醒线程返回0,没有返回非0。
三、实例解析###
多线程开发中,如果很多线程都访问共有的资源的时候,有可能就会导致数据出错,所以通过dispatch_semaphore来实现多线程同步的限制功能。

浙公网安备 33010602011771号