Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpSyInr 139 of 288 menu
◀ ▶

Введение в синхронизацию в Rust

Когда несколько линий выполнения смотрят на одно и то же число или структуру, каждая может прочитать старое значение и затереть чужое приращение. Итог тогда зависит от случайного порядка шагов, а ошибку трудно воспроизвести на другой машине.

Замок вокруг общих данных заставляет менять их по очереди: пока одна линия держит доступ, остальные ждут на границе ожидания. Когда защитная оболочка выходит из области видимости, доступ отпускается сам, без отдельной команды в конце блока.

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

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

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить