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

二つの問題のような音:

  • 別の1つのスレッドとロック解除のロックのロックはサポートされていません - あなたはおそらくNSConditionをしたいです。親スレッドのNSConditionを待ち、子スレッドで通知します。
  • 通常のNSLockは、すでにロックされている間はロックできません。それはNSRecursiveLockのためです。
3

完了したら-unlockを送信したことを忘れましたか? -lockへの各コールは、-unlockへのコールとペアにする必要があります。

+0

確かに:-) – Nippysaurus

関連する問題