Я использую класс NSCondition в этом смысле:
- (void) method1
{
[[cocoaCondition lock] lock];
while (!someCheckIsTrue) {
[cocoaCondition wait];
}
// Do something.
[cocoaCondition unlock];
}
- (void) method2
{
[cocoaCondition lock];
// Do something.
someCheckIsTrue = YES;
[cocoaCondition signal];
[cocoaCondition unlock];
}
У меня два потока, thread1 запускает method1, а thread2 запускает method2. Я надеюсь, что при вызове [cocoaCondition wait]
поток1 будет заблокирован. Затем, когда thread2 вызывает [cocoaCondition signal]
, thread1 возобновляет работу. Я протестировал код, и он работает так, как я надеюсь.
Но, как видите, когда работает код:
шаг 1, thread1 вызывает: [cocoaCondition lock]
(Apple сообщает: пытается получить блокировку, блокируя выполнение потока до тех пор, пока блокировка не будет получена)
шаг 2, нить1 вызывает: [cocoaCondition wait]
шаг 3, thread2 вызывает: [cocoaCondition lock]
(Следуя документу Apple, thread2 должен быть заблокирован)
шаг 4, thread2 вызывает: [cocoaCondition signal]
(Таким образом, thread2 должен быть заблокирован и не может вызывать этот метод, пока не будет вызван [cocoaConditon unlock]
)
Я думаю, что мой код заблокирован, но почему бы и нет?
Так что я думаю, что условие какао разблокировано, когда thread1 вызывает [cocoaCondition wait]
на шаге 2, не так ли?