Sobes.tech
Junior — Middle
139

Care este diferența dintre mecanismul de blocare mutuală (mutex) și variabila de condiție (Condition Variable) în sincronizarea firelor?

Companiile au fost întrebate
КасперскийКасперский

Răspuns de la AI

sobes.tech AI

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

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

Основные отличия:

  • Mutex блокирует доступ к ресурсу, предотвращая одновременное выполнение критической секции.
  • Condition Variable используется для организации ожидания и уведомления между потоками, позволяя одному потоку ждать события, а другому — сигнализировать о его наступлении.

Пример использования:

std::mutex mtx;
std::condition_variable cv;
bool ready = false;

// Поток-потребитель
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, []{ return ready; }); // ждет, пока ready == true
// после пробуждения продолжает работу

// Поток-производитель
{
    std::lock_guard<std::mutex> guard(mtx);
    ready = true;
}
cv.notify_one(); // сигнализирует потребителю

Таким образом, mutex контролирует доступ, а condition variable — координирует взаимодействие потоков через ожидание и уведомление.