NSLock - 锁定锁定时应该阻止?

时间:2011-02-01 21:28:47

标签: cocoa nslock

我有一个以

开头的循环
[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.

“锁定”文档说明如下:

  

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

这让我觉得它会阻止,直到可以获得锁定?

2 个答案:

答案 0 :(得分:9)

听起来像两个问题:

  • 不支持在一个线程上锁定锁定并在另一个线程上解锁 - 您可能需要NSCondition。等待父线程中的NSCondition,并在子线程中发出信号。
  • 正常NSLock在锁定时无法锁定。这就是NSRecursiveLock的用途。

答案 1 :(得分:3)

你记得在完成后发送-unlock吗?每次拨打-lock都必须与-unlock的通话配对。