Добавить объявление

Продолжаю изучать Rust и добрался до Mutex

Продолжаю изучать Rust и добрался до Mutex. После NSLock в Swift вижу интересные отличия в подходах к синхронизации потоков!

Swift с NSLock:


let lock = NSLock()
var counter = 0

func increment() {
lock.lock()
counter += 1
lock.unlock()
}

Rust с Mutex:


use std::sync::Mutex;

let counter = Mutex::new(0); // Данные внутри Mutex

fn increment() {
let mut num = counter.lock().unwrap(); // Автоматический lock
*num += 1;
} // Автоматический unlock при выходе из области видимости

В Rust Mutex непосредственно владеет данными, что полностью меняет подход к синхронизации. Мьютекс автоматически освобождается при выходе из области видимости, поэтому нет риска забыть вызвать unlock() как в Swift, что может вызвать deadlock при вложенных блокировках.

В Rust так же возможен deadlock при сложных сценариях, но компилятор предотвращает многие ошибки доступа к памяти, дополнительно проверяя правильность работы с заблокированными данными, обеспечивая тем самым дополнительную безопасность.

Хотя синтаксис в Rust выглядит неочевидным, зато работа мьютекса более безопасная.
26.10.2025 11 173