Я реализовал очередь без блокировок в C, используя сравнение и замену на основе http://www.boyet.com/articles/LockfreeQueue.html.
Он отлично работает, но я пытаюсь интегрировать эту очередь в список пропуска без блокировки, который я реализовал. Я использую список пропуска в качестве очереди с приоритетом и хотел бы использовать очередь без блокировок внутри каждого узла для хранения нескольких значений при конфликте приоритетов. однако из-за способа управления узлами в списке пропуска, когда я обнаруживаю конфликт приоритетов, мне нужно иметь возможность добавлять элемент в очередь, только если очередь не пуста.
из-за того, что очередь не требует блокировок, я не знаю, как на самом деле выполнить эту операцию.
Итак, как мне написать атомарную операцию enqueue_if_not_empty?