Sobes.tech
Back to questions
Junior — Middle
95

В чем отличие между механизмом взаимной блокировки (mutex) и условной переменной (Condition Variable) в синхронизации потоков?

Companies where asked
КасперскийКасперский

Answer from 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 — координирует взаимодействие потоков через ожидание и уведомление.