Sobes.tech
Junior — Middle

Magyarázza el a std::condition_variable célját és működését C++-ban.

sobes.tech MI

Válasz az MI-től

A std::condition_variable a C++-ban a szálak közötti szinkronizáció szervezésére szolgál. Lehetővé teszi, hogy egy vagy több szál várjon egy adott esemény bekövetkeztére, miközben egyidejűleg felszabadít egy mutexet, hogy más szálak módosíthassák az első szál által várt állapotot.

Főbb pontok:

  • A szál a wait-et hívja a condition_variable-on, átadva a saját mutexét.
  • Várakozás közben a mutex felszabadul, lehetővé téve más szálak számára, hogy hozzáférjenek a megosztott adatokhoz.
  • Amikor az esemény megtörténik, egy másik szál meghívja a notify_one vagy notify_all-t, hogy felébressze a várakozó szálakat.
  • Ébredés után a szál újra megszerzi a mutexet és ellenőrzi a feltételt.

Használati példa:

#include <mutex>
#include <condition_variable>
#include <queue>

std::mutex mtx;
std::condition_variable cv;
std::queue<int> dataQueue;

void producer() {
    std::unique_lock<std::mutex> lock(mtx);
    dataQueue.push(42);
    cv.notify_one();
}

void consumer() {
    std::unique_lock<std::mutex> lock(mtx);
    cv.wait(lock, []{ return !dataQueue.empty(); });
    int data = dataQueue.front();
    dataQueue.pop();
    // adatok feldolgozása
}

Így a condition_variable hatékonyan segíti a várakozás és értesítés szervezését szálak között aktív polling nélkül.