Вы можете сделать это с семафором; но вместо того, чтобы использовать семафор для управления доступом к части кода (т. е. получить блокировку, использовать ресурс, освободить модель блокировки), вы вместо этого просто воспринимаете его как гейт - получение, тестирование условия / блока, освобождение и продолжение.
NSCondition
даст вам семафор высокого уровня. В обзоре шаг 3 - «проверить, стоит ли мне делать паузу», а шаги 4 и 5 - «нет, ничего не делать».