У меня есть многопоточная программа, состоящая из класса Consumer
и класса Producer
. В настоящее время я использую Fifo queue.Queue
в реализации, где производитель put
с данными в конце очереди, а потребитель get
с ними.
Тем не менее, я хотел бы добавить функцию, при которой, при необходимости, Consumer
может put
вернуть (возможно, слегка измененный) элемент, который он get
s, поместив обратно перед Queue
(так что следующий элемент, возвращенный get
, будет только что добавленный элемент, как в стеке).
Я знаю, что это возможно с deque
s, но я прочитал здесь что они потокобезопасны только для append()
и popleft()
. Для вышеуказанных целей мне также потребуется использовать appendleft()
.
Существует ли потокобезопасная структура данных, имеющая функции deque
? Если нет, могу ли я сделать deque
потокобезопасным, установив свои собственные блокировки всякий раз, когда я использую appendleft
?