8

私はで始まるループを持っています

[lock lock];

ループの本体で、ループが再び実行される前に終了する必要がある別のスレッドを作成しているためです。(他のスレッドは終了時にロックを解除します)。

ただし、2番目のループで次のエラーが発生します。

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.

「ロック」ドキュメントには、次のように記載されています。

要約:ロックを取得しようとし、ロックを取得できるようになるまでスレッドの実行をブロックします。(必要)

ロックを取得できるようになるまでブロックするだけだと思いますか?

4

2 に答える 2

9

2つの問題のように聞こえます:

  • あるスレッドでロックをロックし、別のスレッドでロックを解除することはサポートされていません。おそらく必要ですNSCondition。親スレッドで待機しNSCondition、子スレッドで通知します。
  • すでにロックされている間は、ノーマルNSLockをロックすることはできません。それNSRecursiveLockが目的です。
于 2011-02-01T21:51:35.883 に答える
3

-unlock終わったときに送るのを覚えていましたか?への各呼び出しは、へ-lockの呼び出しとペアにする必要があります-unlock

于 2011-02-01T21:54:39.157 に答える