Sobes.tech
Junior — Middle

Εξηγήστε τον σκοπό και τη λειτουργία του std::condition_variable στη C++.

sobes.tech AI

Απάντηση από AI

Το std::condition_variable στη C++ χρησιμοποιείται για την οργάνωση του συγχρονισμού μεταξύ νημάτων. Επιτρέπει σε ένα ή περισσότερα νήματα να περιμένουν την εμφάνιση ενός συγκεκριμένου γεγονότος, απελευθερώνοντας ταυτόχρονα ένα mutex ώστε άλλα νήματα να μπορούν να αλλάξουν την κατάσταση που περιμένει το πρώτο νήμα.

Βασικά σημεία:

  • Το νήμα καλεί wait στο condition_variable, περνώντας το mutex που κατέχει.
  • Κατά τη διάρκεια της αναμονής, το mutex απελευθερώνεται, επιτρέποντας σε άλλα νήματα να έχουν πρόσβαση στα κοινά δεδομένα.
  • Όταν συμβεί το γεγονός, ένα άλλο νήμα καλεί notify_one ή notify_all για να ξυπνήσει τα νήματα που περιμένουν.
  • Μετά την αφύπνιση, το νήμα ξανακατέχει το mutex και ελέγχει την κατάσταση.

Παράδειγμα χρήσης:

#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();
    // επεξεργασία δεδομένων
}

Έτσι, το condition_variable βοηθά στην αποτελεσματική οργάνωση της αναμονής και της ειδοποίησης μεταξύ νημάτων χωρίς ενεργό ερώτηση (polling).