Sobes.tech
Назад к вопросам
Junior — Middle
76

Объясните принцип работы взаимной блокировки (mutex) в контексте многопоточного программирования.

Компании, где спрашивали
AstonAston

Ответ от нейросети

sobes.tech AI

Взаимная блокировка (mutex) — это механизм синхронизации, который используется для предотвращения одновременного доступа нескольких потоков к общему ресурсу, например, к переменной или структуре данных. Mutex гарантирует, что в каждый момент времени ресурс может использовать только один поток, тем самым предотвращая состояния гонки и обеспечивая целостность данных.

Принцип работы:

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

Пример на Java:

import java.util.concurrent.locks.ReentrantLock;

public class Counter {
    private int count = 0;
    private final ReentrantLock lock = new ReentrantLock();

    public void increment() {
        lock.lock(); // захватываем mutex
        try {
            count++;
        } finally {
            lock.unlock(); // освобождаем mutex
        }
    }

    public int getCount() {
        return count;
    }
}

В этом примере ReentrantLock выступает в роли mutex, обеспечивая, что только один поток одновременно может увеличить счетчик.