РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1067 of 1245 menu

Метод lock

Метод lock класса Mutex блокирует мьютекс, ожидая освобождения блокировки, если она уже удерживается другим потоком. После успешной блокировки метод возвращает умный указатель MutexGuard, через который можно получить доступ к защищаемым данным. Параметров метод не принимает.

Синтаксис

mutex.lock()

Пример

Давайте создадим мьютекс с числом и получим доступ к нему через метод lock:

use std::sync::Mutex; fn main() { let mutex = Mutex::new(12345); let guard = mutex.lock().unwrap(); println!("{}", *guard); }

Результат выполнения кода:

12345

Пример

Давайте изменим значение внутри мьютекса через полученный указатель MutexGuard:

use std::sync::Mutex; fn main() { let mutex = Mutex::new(String::from("abcde")); { let mut guard = mutex.lock().unwrap(); *guard = String::from("12345"); } let guard = mutex.lock().unwrap(); println!("{}", *guard); }

Результат выполнения кода:

"12345"

Пример

Давайте используем lock для безопасного изменения данных из нескольких потоков:

use std::sync::{Arc, Mutex}; use std::thread; fn main() { let mutex = Arc::new(Mutex::new(0)); let mut handles = vec![]; for _ in 0..5 { let mutex = Arc::clone(&mutex); let handle = thread::spawn(move || { let mut guard = mutex.lock().unwrap(); *guard += 1; }); handles.push(handle); } for handle in handles { handle.join().unwrap(); } let guard = mutex.lock().unwrap(); println!("{}", *guard); }

Результат выполнения кода:

5

Смотрите также

  • класс Mutex,
    который обеспечивает безопасный доступ к данным из нескольких потоков
  • метод new,
    который создает новый мьютекс с указанным значением
  • метод try_lock,
    который пытается заблокировать мьютекс без ожидания
  • структура MutexGuard,
    которая предоставляет доступ к данным и освобождает блокировку при удалении
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить