Я попытаюсь объяснить, как я это вижу.
Все потоки, кроме последнего, придут и будут ждать первого sem.wait ().Как только последний поток прибудет, он вызовет sem.signal () (потому что count == n), что позволит одному из ожидающих потоков (скажем, T1) продолжить.Затем T1, в свою очередь, выполнит sem.signal (), который позволит продолжить другой поток.Это что-то вроде цепной реакции.Обратите внимание, что последний поток, который пройдет, также сделает сигнал, который примет значение семафора 1. Теперь, если два потока приходят и видят, что count == 0, то попытается выполнить sem.wait ().Но поскольку значение семафора равно 1, один поток не сможет пройти, что приведет к взаимоблокировке.