cocoa - NSLock - 在锁定锁定的锁时应该阻塞吗?

标签 cocoa nslock

我有一个以 a 开头的循环

[lock lock];

因为在循环体中我正在创建另一个线程,该线程需要在循环再次运行之前完成。 (完成后另一个线程将解锁它)。

但是在第二个循环中我收到以下错误:

2011-02-02 07:15:05.032 BLA[21915:a0f] *** -[NSLock lock]: deadlock (<NSLock: 0x100401f30> '(null)')
2011-02-02 07:15:05.032 BLA[21915:a0f] *** Break on _NSLockError() to debug.

“锁定”文档说明如下:

Abstract: Attempts to acquire a lock, blocking a thread’s execution until the lock can be acquired. (required)

这让我认为它会阻塞直到获得锁为止?

最佳答案

听起来像两个问题:

  • 不支持在一个线程上锁定锁并在另一个线程上解锁 - 您可能需要 NSCondition。在父线程中等待 NSCondition,并在子线程中向其发出信号。
  • 普通的NSLock在已经锁定的情况下无法被锁定。这就是 NSRecursiveLock 的用途。

关于cocoa - NSLock - 在锁定锁定的锁时应该阻塞吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4868160/

相关文章:

objective-c - 何时使用实例变量,何时使用属性

objective-c - 使用新属性重绘 - Cocoa/Objective C

swift - 未触发 NSToolbarItem 的操作

swift - NSLock.lock() 在锁定已持有时执行?

objective-c - 使队列线程安全

ios - 使用NSConditionLock卡住iOS应用

iphone - NSLock 实例应该是 "global"吗?

objective-c - Objective-C中的retain和strong有什么区别?

Swift StatusBarItem,使按钮支持拖放