Как реализовать очередь с использованием двух стеков? объясняет больше и имеет некоторый код.
Если вы сделаете это низкоуровневым способом, у вас будет две области памяти и два указателя
Один указатель увеличивается при записи, другой при чтении
Как только область чтения израсходована, вы переворачиваете область записи и меняете их местами.
Таким образом, нет никакой возможности, чтобы чтение мешало написанию и наоборот. Единственное соединение между этими двумя операциями происходит во время операции «реверс и своп», и тогда все должны ждать.