Я использую список TVar
s, к которым имеют доступ несколько потоков. Однако в моем коде есть один раздел, критичный к производительности, который гласит:
sequence [ atomically $ writeTVar tvar1 someValue | tvar1 <- listOfTVars ]
Гарантируется, что в тот момент, когда этот код будет достигнут, никакой другой поток не получит доступ к любой из TVar
s в listOfTVars
до тех пор, пока sequence
не будет завершено ни чтением, ни записью.
Предоставляет ли GHC какие-либо примитивы, которые позволили бы мне "небезопасно" выполнять эти обновления значений? Моя цель состояла бы в том, чтобы сделать это быстрее, не выполняя STM-накладные расходы при совершении транзакции для каждой из них. Другими словами, мне не нужна атомарность, которую обеспечивает STM writeTVar
;Вместо этого мне просто нужен быстрый способ обновить значения, хранящиеся в TVar
s.