Sobes.tech
Junior — Middle

Selgitage std::condition_variable eesmärki ja tööd C++-s.

sobes.tech AI

Vastus AI-lt

std::condition_variable in C++ kasutatakse sünkroniseerimise korraldamiseks vahel niitide. See võimaldab ühel või mitmel niidil oodata teatud sündmuse toimumist, samal ajal vabastades mutexi, et teised niidid saaksid muuta seisundit, mida esimene niit ootab.

Peamised punktid:

  • Niit kutsub välja wait condition_variable'il, edastades oma mutexi.
  • Ootamise ajal vabastatakse mutex, võimaldades teistel niitidel pääseda jagatud andmetele.
  • Kui sündmus toimub, kutsub teine niit välja notify_one või notify_all, et äratada ootavad niidid.
  • Pärast äratust omandab niit uuesti mutexi ja kontrollib tingimust.

Kasutusnäide:

#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();
    // andmete töötlemine
}

Sellisel viisil aitab condition_variable tõhusalt organiseerida ootamist ja teavitamist niitide vahel ilma aktiivse pollinguta.