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.

в документации" блокировка " указано следующее:

Аннотация: пытается получить блокировку, блокируя выполнение потока до тех пор, пока блокировка не будет приобретенный. (обязательно)

что заставляет меня думать, что он будет просто блокировать, пока замок не будет приобретен?

2 ответов


звучит как две проблемы:

  • блокировка блокировки на одном потоке и разблокировка на другом не поддерживается-вы, вероятно, хотите NSCondition. Подождите NSCondition в Родительском потоке и сигнализируйте об этом в дочернем потоке.
  • нормальный NSLock не может быть заблокирован, пока уже заблокирован. Вот что!--3--> - это для.

вы не забыли отправить -unlock когда вы закончили? Каждый вызов -lock должен быть сопряжен с вызовом -unlock.