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
.