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