Sobes.tech
Junior — Middle

Paaiškinkite std::condition_variable paskirtį ir veikimą C++ kalboje.

sobes.tech AI

Atsakymas iš AI

std::condition_variable C++ kalboje naudojama sinchronizacijai tarp gijų organizuoti. Ji leidžia vienai ar kelioms gijoms laukti tam tikro įvykio, tuo pačiu metu atlaisvindama mutex, kad kitos gijos galėtų keisti būseną, kurios laukia pirmoji gija.

Pagrindiniai punktai:

  • Gija iškviečia wait ant condition_variable, perduodama savo turimą mutex.
  • Laikotarpiu, kai laukia, mutex yra atlaisvinamas, leidžiant kitoms gijoms pasiekti bendrus duomenis.
  • Kai įvyksta įvykis, kita gija iškviečia notify_one arba notify_all, kad pažadintų laukiančias gijas.
  • Po pažadinimo, gija vėl įgyja mutex ir tikrina sąlygą.

Naudojimo pavyzdys:

#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();
    // duomenų apdorojimas
}

Šiuo būdu, condition_variable padeda efektyviai organizuoti laukimą ir pranešimą tarp gijų be aktyvaus polingavimo.