C++ 中執行緒同步是指協調執行緒對共享資源的訪問,防止資料競爭和資源破壞。為此,可以使用互斥鎖 (Mutex) 控制對共享資源的獨佔訪問,還可以使用條件變數 (Condition Variable) 來協調執行緒之間的通訊。在實戰中,互斥鎖用於管理任務佇列,而條件變數用於喚醒等待新任務的線程,從而實現多執行緒應用程式的協調執行。
如何同步 C++ 中的執行緒?
理解線程同步
線程同步是指協調並發執行的線程,確保它們以有條不紊的方式存取共享資源。 C++ 中提供了各種同步機制,可幫助我們實現這一點。
互斥鎖 (Mutex)
互斥鎖是用來控制對共享資源的獨佔存取的鎖定。一次只允許一個執行緒持有互斥鎖,這樣可以防止資料競爭和資源破壞。
範例程式碼:
#include <thread> #include <mutex> int shared_value = 0; // 创建互斥锁 std::mutex m; void increment_shared_value() { // 获取互斥锁 m.lock(); // 临界区:独占访问共享值 ++shared_value; // 释放互斥锁 m.unlock(); }
條件變數(Condition Variable)
條件變數用於協調執行緒之間的通信。一個執行緒可以使用條件變數等待特定條件來滿足,而另一個執行緒可以使用 notify_one() 或 notify_all() 來喚醒等待的執行緒。
範例程式碼:
#include <thread> #include <condition_variable> bool condition_met = false; std::condition_variable cv; std::mutex m; void wait_for_condition() { // 获取互斥锁 std::unique_lock<std::mutex> lock(m); // 等待条件得到满足 cv.wait(lock, [] { return condition_met; }); // 条件已得到满足,可以继续执行 // ... }
實戰案例:
考慮一個多執行緒程序,它將多個任務分配給不同的線程。為了協調任務的執行,我們可以使用互斥鎖來防止多個執行緒同時存取任務佇列。條件變數可以用來喚醒等待新任務的執行緒。
結論:
互斥鎖和條件變數是 C++ 中強大的同步機制,它們使我們能夠控制執行緒之間的資源存取和通訊。透過理解和使用這些機制,我們可以編寫健全的多執行緒應用程序,從而充分利用現代電腦的多核心架構。
以上是如何同步C++中的執行緒?的詳細內容。更多資訊請關注PHP中文網其他相關文章!