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
waitant 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_onearbanotify_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.