Что делает операция fetch_and_store

#algorithm #memory #concurrency #lock-free

#алгоритм #память #параллелизм #без блокировки

Вопрос:

У меня есть алгоритм с операцией fetch_and_store внутри него. Я глобально понимаю алгоритм, кроме этой строки : pred : ^qnode := I->prev := fetch_and_store (L, I) . Это алгоритм CLH (для программирования с параллелизмом). Может кто-нибудь помочь мне понять эту часть.

Алгоритм: http://www.cs.rochester.edu/research/synchronization/pseudocode/ss.html#clh

Ответ №1:

fetch_and_store (L, I) атомарно записывает I в L и возвращает предыдущее значение L. Это гарантирует, что с узлом блокировки будет работать только один поток: поток берет его для обработки и заменяет другим узлом. Другой поток займет узел, который мы разместили здесь.

Комментарии:

1. Итак, это атомарный обмен. Как сравнение и обмен, но без сравнения.