NSCondition



NSCondition обеспечивают простой способ ждать выполнения условия.



Когда заблокируемый поток, понимает, что требуемое ему условие пока не выполнено, то ему нужен способ удержаться и продолжиться свою работу пока условие будет не выполнено.



Это может быть реализовано путем непрерывной или периодической проверки этого условия (ожидание занятости), но при этом, что произойдет с блокировками потока? Должны ли мы держать их, пока мы ждем или освободим их в надежде, что мы сможем их снова приобрести, когда условие будет выполнено?



NSCondition обеспечивают чистое решение этой проблемы, как только поток поставил блокировку (вызвал lock()) он может быть помещен в лист ожидания для этого условия и проснуться, как только другой поток сигнализирует о том, что условие выполнено.