我有一个以 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/