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

Nip*_*rus 8 cocoa nslock

我有一个以a开头的循环

[lock lock];
Run Code Online (Sandbox Code Playgroud)

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

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

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.
Run Code Online (Sandbox Code Playgroud)

"lock"文档说明了以下内容:

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

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

Jen*_*ton 9

听起来像两个问题:

  • 不支持在一个线程上锁定锁定并在另一个线程上解锁 - 您可能需要NSCondition.NSCondition在父线程中等待,并在子线程中发出信号.
  • NSLock已锁定时无法锁定法线.这NSRecursiveLock是为了什么.