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来实现多线程同步的限制功能。

posted @ 2016-05-03 12:06  lvable  阅读(130)  评论(0)    收藏  举报