一些收藏

semaphore的几种用法

2020-10-28  本文已影响0人  康小曹

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. 阻塞线程

dispatch_semaphore_create(0)
semaphore.wait(),此时因为计数器为0,当前线程会阻塞在这段代码中;
异步回调完成之后:semaphore.signal(),wait 代码收到通知,此时计数器为1,将会继续执行代码,比如 return 请求到的数据;

上一篇下一篇

猜你喜欢

热点阅读