Я думаю, что ключевым моментом является «Это необходимо, потому что, если N потоков ожидают у ворот в момент их открытия, им всем должно быть разрешено продолжить .». Чтобы достичь этого, недостаточно только проверить «! IsOpen», когда «ворота открываются и закрываются в быстрой последовательности». У нас должен быть способ узнать, что ворота однажды открыты, даже если ворота закрываются в быстрой последовательности. В конце концов, N потоков в предыдущем поколении ожидают продолжения.
Вопрос 1. В первый раз, когда все потоки получают уведомление, повторно получают блокировку и выходят из режима ожидания, destinationGeneration равен 0, но генерация получает новое значение 1, поэтому N потоков могут продолжить.
Вопрос 2. Думаю, это тоже ошибка.