Я использую класс 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];
}
У меня есть два потока, поток1 запускает метод1, а поток2 запускает метод2. Я надеюсь, что при вызове [cocoaCondition wait]
поток1 будет заблокирован. Затем, когда поток 2 вызовет [cocoaCondition signal]
, поток 1 возобновит работу. Я протестировал код, и он работает так, как я надеюсь.
Но, как видите, при запуске кода:
шаг 1, поток 1 вызывает: [cocoaCondition lock]
(документ Apple говорит: попытки получить блокировку, блокируя выполнение потока до тех пор, пока блокировка не будет получена)
шаг 2, вызовы потока 1: [cocoaCondition wait]
шаг 3, вызовы потока 2: [cocoaCondition lock]
(согласно документации Apple, поток 2 должен быть заблокирован)
шаг 4, вызовы потока 2: [cocoaCondition signal]
(Итак, поток 2 должен быть заблокирован и может не вызывать этот метод до тех пор, пока не будет вызван [cocoaConditon unlock]
)
Я думаю, что мой код зашел в тупик, но почему бы и нет? Итак, я предполагаю, чтоcocoCondition разблокируется, когда thread1 вызывает [cocoaCondition wait]
на шаге 2, не так ли?