Как правило, вы не можете завершить поток, который ожидает синхронизированный блок, если вам нужно такое поведение, вы должны использовать временную парадигму ожидания и сигнала, чтобы потоки находились в состоянии ожидания звука и могли быть прерваны. Кроме того, если вы используете временную парадигму ожидания и сигнала, каждый раз, когда истекает время ожидания, ваши потоки имеют возможность не возвращаться в спящий режим, а выходить или идти по другому пути (т. Е. Даже если вы не решите прекратить их ).
Синхронизированные блоки предназначены для неоспоримых блокировок, при неоспоримых блокировках синхронизация должна быть довольно близка к noop, но как только блокировка становится оспариваемой, они очень сильно влияют на производительность приложения, причем даже не просто потому, что они блокируются. сериализация вашей параллельной программы.
Я ни в коем случае не эксперт Objective C, но я уверен, что есть некоторые более продвинутые шаблоны синхронизации, такие как барьеры, условия, атомика и т. Д.