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