Так что я собирался по статье Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms по Магеда М. Майкл и Майкл Л. Скотт, и есть небольшая проблема, которую я не понимаю:Two-Lock Concurrent Queue Алгоритм Выпуск
Допустим, у нас есть два параллельных потока, которые запускаются сразу после инициализации очереди. Один из потоков вызывает enqueue
, а другой - dequeue
. Что мешает им получить доступ к полю next
фиктивного узла одновременно? не может ли поток dequeue
читать поле next
, в то время как поток enqueue
пишет ему? Они оба используют разные замки ... поэтому я не понимаю, что синхронизирует их.
Спасибо.
На какой фиктивный узел вы ссылаетесь? – Saeed
тот, который создан при инициализации() – gipouf
Я предполагаю, что вы имеете в виду первый узел, созданный при инициализации? – Saeed