swift 使用NSCondition自定义实现DispatchSemaphore

材料

  1. NSCondition 条件锁
struct ZHSemaphore {
    var value: Int
    var wakeups: Int = 0
    let cond = NSCondition()
    init(value: Int) {
        self.value = value
    }
}
extension ZHSemaphore {
    mutating func wait() {
        cond.lock()
        value -= 1
        if value < 0 {
            repeat {
                cond.wait()
                debugPrint("iam wake up")
            } while wakeups < 1
            wakeups -= 1
        }
                
        cond.unlock()
    }
    mutating func signal() {
        cond.lock()
        value += 1
        if value <= 0 {
            wakeups += 1
            cond.signal()
        }
        cond.unlock()
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在平时的开发中经常使用到多线程,在使用多线程的过程中,难免会遇到资源竞争的问题,那我们怎么来避免出现这种问题那? ...
    IAMCJ阅读 8,398评论 2 25
  • 引用自多线程编程指南应用程序里面多个线程的存在引发了多个执行线程安全访问资源的潜在问题。两个线程同时修改同一资源有...
    Mitchell阅读 6,112评论 1 7
  • 前言 iOS开发中由于各种第三方库的高度封装,对锁的使用很少,刚好之前面试中被问到的关于并发编程锁的问题,都是一知...
    喵渣渣阅读 9,137评论 0 33
  • remove key in another accountand deploy the key in this a...
    LFBuildMountain阅读 3,153评论 0 0
  • 想翻开历史 找一个人 来比美 想翻遍词典 找一个词 来比拟
    半个读书人阅读 2,224评论 32 43

友情链接更多精彩内容