Введение в синхронизацию в Rust
Когда несколько линий выполнения смотрят на одно и то же число или структуру, каждая может прочитать старое значение и затереть чужое приращение. Итог тогда зависит от случайного порядка шагов, а ошибку трудно воспроизвести на другой машине.
Замок вокруг общих данных заставляет менять их по очереди: пока одна линия держит доступ, остальные ждут на границе ожидания. Когда защитная оболочка выходит из области видимости, доступ отпускается сам, без отдельной команды в конце блока.
В модуле синхронизации стандартной библиотеки
лежат взаимное исключение для одного писателя,
замок с отдельными правилами для чтения
и записи, оболочка со счетом для передачи
владения между потоками и ленивое значение,
которое считают один раз при первом чтении.
Все примеры раздела собирают один файл
main.rs без Cargo.
Здесь разберем замок для счетчика, несколько читателей и одного писателя, общую оболочку для фоновых линий и отложенную инициализацию. Обмен только сообщениями между линиями здесь не затрагиваем: для одного счетчика удобнее согласованный доступ к памяти.