C++ 庫 - <condition_variable>



C++ 中的<condition_variable>是一個同步原語,允許執行緒等待滿足特定條件後再繼續執行。它在多執行緒應用程式中非常有用,在這些應用程式中,一個或多個執行緒需要根據共享資料協調其操作。透過使用條件變數,我們可以管理併發任務,確保執行緒根據特定條件等待或繼續執行。

它與 `std::mutex` 結合使用,通常與 `std::unique_lock` 一起使用。`unique_lock` 傳遞給條件變數,以便線上程等待時釋放鎖,允許其他執行緒修改共享資料。

包含 <condition_variable> 標頭檔案

要在你的 C++ 程式中包含 <condition_variable> 標頭檔案,可以使用以下語法。

#include <condition_variable>

<condition_variable> 標頭檔案的函式

以下是 <condition_variable> 標頭檔案中所有函式的列表。

序號 函式和描述
1 notify_one

它通知一個等待執行緒。

2 notify_all

它通知所有等待執行緒。

3 wait

它阻塞當前執行緒,直到條件變數被喚醒。

4 wait_for

它阻塞當前執行緒,直到條件變數被喚醒或超過指定的超時時間。

5 wait_until

它阻塞當前執行緒,直到條件變數被喚醒或達到指定的時間點。

執行緒等待

在下面的示例中,我們將展示一個執行緒如何等待條件為真。

#include <iostream>
#include <thread>
#include <condition_variable>
#include <mutex>
std::mutex a;
std::condition_variable b;
bool ready = false;
void x() {
   std::unique_lock < std::mutex > lock(a);
   std::cout << "Waiting For Signal..." << std::endl;
   b.wait(lock, [] {
      return ready;
   });
   std::cout << "Signal Received" << std::endl;
}
int main() {
   std::thread y(x);
   std::this_thread::sleep_for(std::chrono::seconds(3));
   {
      std::lock_guard < std::mutex > lock(a);
      ready = true;
   }
   b.notify_one();
   y.join();
   return 0;
}

輸出

以下是上述程式碼的輸出:

Waiting For Signal...
Signal Received
廣告