8

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

“锁定”文档说明以下内容:

摘要:尝试获取锁,阻塞线程的执行,直到可以获取锁为止。(必需的)

这让我认为它只会阻塞直到可以获取锁?

4

2 回答 2

9

听起来像两个问题:

  • 不支持锁定一个线程并解锁另一个线程 - 您可能需要NSCondition. 在父线程中等待NSCondition,并在子线程中发出信号。
  • 已锁定的普通NSLock无法锁定。这NSRecursiveLock就是为了。
于 2011-02-01T21:51:35.883 回答
3

完成后你还记得发送-unlock吗?每个呼叫-lock必须与呼叫配对-unlock

于 2011-02-01T21:54:39.157 回答