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
waitcondition_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_onevõinotify_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.