Sobes.tech
Junior — Middle
144

Ի՞նչ է տարբերությունը մուտքագրման մուտքագրման (mutex) մեխանիզմի և պայմանական փոփոխականի (Condition Variable) միջև թելերի սինխրոնիզացիայում։

Ընկերությունները, որտեղ հարցրել են
КасперскийКасперский

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