2011-02-01 75 views
8

我有一個循環,其與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. 

「鎖定」的文件規定如下:

Abstract: Attempts to acquire a lock, blocking a thread’s execution until the lock can be acquired. (required)

這讓我覺得它只是阻止,直到鎖定可能被收購?

回答

8

聽起來像是兩個問題:

  • 鎖定在一個線程,並在另一個開鎖的鎖不支持 - 你可能想NSCondition。等待父線程中的NSCondition,並在子線程中發出信號。
  • 正常的NSLock在鎖定時無法鎖定。這就是NSRecursiveLock的用途。
3

您是否記得在完成工作後發送-unlock?每次撥打-lock必須與撥打-unlock的電話配對。

+0

我當然做到了:-) – Nippysaurus 2011-02-01 22:28:00