0
点赞
收藏
分享

微信扫一扫

semaphore的几种用法

勇敢乌龟 2021-09-24 阅读 71

1. 线程同步(加锁)

  1. 使用 dispatch_semaphore_create(1) 创建一个最大量为 1 的信号量;
  2. 调用 semaphore.wait(),信号量减 1 变为0;
  3. 执行同步代码,同时其他线程的代码进入时会挂起等待;
  4. 执行完毕之后 semaphore.signal(),信号量加 1,发送通知;
  5. 循环;

2. 多线程

semaphore(n)
semaphore.wait()
semaphore.signal()

3. 阻塞线程

  1. 首先 dispatch_semaphore_create(0) 创建一个为0的信号量;
  2. 执行异步代码,比如 HTTP 请求;
  3. semaphore.wait(),此时因为计数器为0,当前线程会阻塞在这段代码中;
  4. 异步代码执行完成,调用 semaphore.signal(),wait 代码收到通知,此时计数器为1,将会继续执行代码,比如 return 请求到的数据;
举报

相关推荐

0 条评论