#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. Итак, это атомарный обмен. Как сравнение и обмен, но без сравнения.