【问题标题】:OSSpinLockLock when already locked?OSSpinLockLock 已经锁定了?
【发布时间】:2014-05-08 15:23:16
【问题描述】:

当我在同一个线程中已经持有锁时使用 OSSpinLockLock 会发生什么? (因此它应该“让我进去”)。

我知道它没有计数器,但是实现一个计数器是个问题,因为我需要验证这是线程,计数为零,所有这些可能也需要锁定...

【问题讨论】:

    标签: macos spinlock


    【解决方案1】:

    如果你试图从已经拥有它的线程中锁定一个自旋锁,你就会死锁。自旋锁不是递归的。

    您应该查看pthread recursive mutexes,或者更改您的设计以避免递归锁定。

    【讨论】:

    • 谢谢,只是我一直在寻找自旋锁,以便在特定场景下获得更好的性能。类似于 Windows 上的关键部分。
    • @VojtěchMeldaMeluzín,Windows 临界区也不是递归的。其余的,当争用较少时,自旋锁很快:否则,它们会浪费 CPU 周期。
    • 不正确,Windows 临界区是递归的。看到这个:msdn.microsoft.com/en-us/library/windows/desktop/…
    • @VojtěchMeldaMeluzín,你是对的。我之前查过,看this question太快了,以为意思相反。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多