РЕДАКТИРОВАТЬ: как прокомментировал @Bonshington, этот ответ относится к NSCondition
(в отличие от NSConditionLock
):
- (void) method1 {
[myCondition lock];
while (!someCheckIsTrue)
[myCondition wait];
// Do something.
[myCondition unlock];
}
- (void) method2 {
[myCondition lock];
// Do something.
someCheckIsTrue = YES;
[myCondition signal];
[myCondition unlock];
}
someCheckIsTrue
может быть чем угодно, этоэто может быть простая переменная BOOL или что-то вроде [myArray count] == 0 && color == kColorRed
, это не имеет значения.Имеет значение только то, что в одном методе вы проверяете условие , пока у вас есть блокировка , а в другом методе вы вносите изменения, которые могут сделать условие истинным , также при наличии блокировки .Волшебство - это части wait
и signal
: wait
фактически разблокирует блокировку и снова получает ее после некоторого другого потока, называемого signal
.