Почему эта реализация очереди с двумя стеками неизменяема и потокобезопасна?

Я видел этот способ реализации очереди с двумя стеками: qaru.site/info/11582/...

И я читал, что таким образом очередь является неизменной и потокобезопасной. Какая точка отделяет это от нормальной очереди и делает ее неизменной и потокобезопасной?

Я был бы очень признателен, если бы кто-нибудь мог объяснить это простым, непрофессиональным способом.

Ответ 1

Как реализовать очередь с использованием двух стеков? объясняет больше и имеет некоторый код.

Если вы сделаете это на низком уровне, у вас будут две области памяти и два указателя Один указатель увеличивается, когда вы пишете, а другой, когда вы читаете

Как только область чтения будет испорчена, вы меняете область записи и меняете ее.

Таким образом, нет никаких шансов, что чтение будет мешать написанию и наоборот. Единственное соединение между двумя операциями - во время операции "обратное и своп", и тогда каждый должен ждать.