Нет: атомарность requestCount и startTime по отдельности не делает атомарным сброс окна вместе со счётчиком. Потоки могут увидеть смешанное состояние и неверно выдать разрешения.
Два счётчика requestCount и startTime по отдельности атомарны. Есть ли гарантия, что их совместное обновление будет атомарным, если одновременно придут несколько потоков после истечения окна?
Нет: атомарность requestCount и startTime по отдельности не делает атомарным сброс окна вместе со счётчиком. Потоки могут увидеть смешанное состояние и неверно выдать разрешения.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Нет: атомарность requestCount и startTime по отдельности не делает атомарным сброс окна вместе со счётчиком. Потоки могут увидеть смешанное состояние и неверно выдать разрешения.
Объедините значения в неизменяемое состояние и меняйте его одним CAS либо защищайте проверку и обновление общим lock. В CAS-цикле после неудачи заново вычисляют решение по актуальному состоянию. Для локального интервала подходит монотонное время. Если лимит общий для нескольких процессов, локальных atomics недостаточно.