Я признаю, что не совсем разбираюсь в способе Windows делать эти вещи, но я представляю, что примитив, который вам нужен, если вы ожидаете только одного флага, это NSConditionLock .У каждой блокировки условий есть определенное условие, потоки могут пытаться заблокировать его, не обращая внимания на условие или только когда оно имеет определенное условие, необязательно с таймаутом для обоих.После этого они могут разблокировать и, при необходимости, установить новое условие.
Возможно, более простым подходом является создание ваших NSThreads вручную, а не просто выгрузка операций в NSOperationQueue.Каждый NSThread автоматически имеет NSRunloop, поэтому вы можете использовать семантику, например:
[object performSelector:@selector(operation:) onThread:targetThread withObject:someArgumentForOperation waitUntilDone:NO];
В этом случае метод 'операция:' будет вызван с назначенным аргументом в назначенном потоке, как только появится такая возможность,и вызывающий поток не заблокирован.Runloops решают ту же проблему, что и классические механизмы отправки сообщений win32, но перекладывают ответственность - Какао занимается блокировкой потоков, пробуждением сообщений и выполнением соответствующих вызовов функций.