2011-02-01 4 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

관련 문제