我有一个以
开头的循环[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.
“锁定”文档说明如下:
摘要:尝试获取锁,阻止线程的执行直到可以获取锁。 (所需的)
这让我觉得它会阻止,直到可以获得锁定?
答案 0 :(得分:9)
听起来像两个问题:
NSCondition
。等待父线程中的NSCondition
,并在子线程中发出信号。NSLock
在锁定时无法锁定。这就是NSRecursiveLock
的用途。答案 1 :(得分:3)
你记得在完成后发送-unlock
吗?每次拨打-lock
都必须与-unlock
的通话配对。