У меня есть неизменяемая структура данных, которая представляет собой функциональную хэш-карту (см. fash.scm), которая совместно используется несколько потоков.
Представьте, что поток хочет изменить глобальную хеш-карту на новую версию. Нужна ли мне блокировка для изменения значения? Если это так, я предполагаю, что мне также нужно заблокировать значение для его чтения, не так ли?
Мне кажется, все сводится к тому, является ли установка значения в Scheme атомарной операцией или нет. Согласно этому ответу для языка C, вы должны установить блокировку как для чтения, так и для записи указателя.
Если это важно, я использую хитрость 2.2.3 и bigloo 4.3.
set!
изменяет один указатель, и этот доступ до получения получит старый хеш, а доступ после получит новый. Я не думаю, что у вас будет полумертвый кот между ними. - person Sylwester   schedule 13.02.2018