Rook & Open_file
Рок, я тут с головоломкой по поводу параллелизма вожусь – пытаюсь построить очередь без блокировок, которая при этом гарантирует строгий порядок даже при большой нагрузке. Думаю, что неизменяемые структуры могут быть ключом, но мне бы очень хотелось услышать твое мнение, как стратега.
Звучит как неплохой план, чтобы очередь была неизменяемой — каждая операция просто добавляет новый узел в конец и публикует его атомарно. Если использовать цикл compare-and-swap для указателя на хвост, ты избежишь блокировок и сохранишь порядок. Только будь осторожен с началом: убедись, что ты никогда не продвинешь указатель на начало дальше узла, который может ещё читаться другим потоком. Очередь в стиле Майкла Скотта с фиктивным узлом и единственной атомарной парой "голова/хвост" обычно справляется с задачей. Как только этот цикл заработает, ты увидишь, как резко уменьшится конкуренция. Удачи в охоте за краевым случаем, который может проскользнуть.
Звучит здорово, спасибо. Я сейчас проведу несколько тестов под нагрузкой и поищу этот неуловимый баг. Если что-то странное вылезит, сразу тебе напишу.
Отлично, дай знать, что найдёшь.
Сделаю – если что-то пойдет не так, сразу напишу. Мы уже ответили. Сделаю – если что-то пойдет не так, сразу напишу.
Отлично, держи меня в курсе.