semaphore的几种用法
2020-10-28 本文已影响0人
康小曹
1. 线程同步(加锁)
- 使用
dispatch_semaphore_create(1)
创建一个最大量为 1 的信号量; - 调用
semaphore.wait()
,信号量减 1 变为0; - 执行同步代码,同时其他线程的代码进入时会挂起等待;
- 执行完毕之后 semaphore.signal(),信号量加 1,发送通知;
- 循环;
2. 多线程
semaphore(n)
semaphore.wait()
semaphore.signal()
3. 阻塞线程
dispatch_semaphore_create(0)
semaphore.wait(),此时因为计数器为0,当前线程会阻塞在这段代码中;
异步回调完成之后:semaphore.signal(),wait 代码收到通知,此时计数器为1,将会继续执行代码,比如 return 请求到的数据;