Junior — Middle
Wyjaśnij cel i działanie std::condition_variable w C++.
sobes.tech AI
Odpowiedź od AI
std::condition_variable w C++ jest używany do organizacji synchronizacji między wątkami. Pozwala jednemu lub wielu wątkom oczekiwać na wystąpienie określonego zdarzenia, jednocześnie zwalniając mutex, aby inne wątki mogły zmienić stan, na który czeka pierwszy wątek.
Główne punkty:
- Wątek wywołuje
waitna condition_variable, przekazując mutex, który posiada. - Podczas oczekiwania mutex jest zwalniany, umożliwiając innym wątkom dostęp do współdzielonych danych.
- Gdy zdarzenie następuje, inny wątek wywołuje
notify_onelubnotify_all, aby obudzić oczekujące wątki. - Po przebudzeniu wątek ponownie przejmuje mutex i sprawdza warunek.
Przykład użycia:
#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();
// przetwarzanie danych
}
W ten sposób condition_variable pomaga efektywnie organizować oczekiwanie i powiadamianie między wątkami bez aktywnego pollingowania.