Это хороший вариант использования ящика arc-swap
, который позволяет атомарно заменять один Arc
другим. Каждый раз, когда вы используете sh для создания новой версии ваших данных, вы создаете клон данных и помещаете новую версию в Arc
, заменяя старую Arc
. Код, который необходимо прочитать, может получить клон Arc
, который сейчас находится в ArcSwap
, а старая версия будет уничтожена, как только больше не останется дескрипторов старой версии.
Если вам нужно изменить данных из нескольких мест, вы должны использовать следующий шаблон, используя Mutex
.
- У вас есть дополнительная версия, используемая для обновлений, хранящихся внутри
Mutex
. - Когда вы используете sh, чтобы обновить данные, заблокируйте мьютекс и внесите изменения.
- Создайте клон объекта, хранящегося в
Mutex
, и поместите его в ArcSwap
. - Затем разблокировать мьютекс.
Любой код, который хочет прочитать данные, возьмет клон из ArcSwap
и никогда не будет касаться Mutex
. Важно, чтобы мьютекс был разблокирован после замены Arc
новой версией.