Sobes.tech
Junior — Middle

Izskaidrojiet std::condition_variable mērķi un darbību C++ valodā.

sobes.tech AI

Atbilde no AI

std::condition_variable C++ valodā tiek izmantots, lai organizētu sinhronizāciju starp pavedieniem. Tas ļauj vienam vai vairākiem pavedieniem gaidīt noteikta notikuma iestāšanos, vienlaikus atbrīvojot mutex, lai citi pavedieni varētu mainīt stāvokli, ko gaida pirmais pavediens.

Galvenie punkti:

  • Pavediens izsauc wait uz condition_variable, nododot savu mutex.
  • Gaidīšanas laikā mutex tiek atbrīvots, ļaujot citiem pavedieniem piekļūt koplietotajiem datiem.
  • Kad notikums notiek, cits pavediens izsauc notify_one vai notify_all, lai pamodinātu gaidošos pavedienus.
  • Pēc pamodināšanas pavediens atkal iegūst mutex un pārbauda nosacījumu.

Piemērs lietošanai:

#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();
    // datu apstrāde
}

Šādā veidā condition_variable palīdz efektīvi organizēt gaidīšanu un paziņojumu starp pavedieniem bez aktīvas aptaujas (polling).