C++ 多執行緒程式設計中,執行緒同步機制必不可少,主要有三種類型:互斥鎖 (Mutex):用於保護共享資源的獨佔存取。條件變數 (Condition Variable):用於通知執行緒特定條件已滿足。讀寫鎖 (Read-Write Lock):允許多個執行緒同時讀取共享數據,但一次只能有一個執行緒寫入。
C++ 多執行緒程式設計中的執行緒同步機制
在多執行緒程式設計中,同步機制對於避免資料競爭和確保線程安全至關重要。以下是C++ 中一些常見的執行緒同步機制:
互斥鎖(Mutex)
互斥鎖是一種低階同步機制,用來保護共享資源的獨佔訪問。它允許一次只有一個執行緒存取臨界區(需要同步的程式碼區塊)。
std::mutex m; void critical_section() { std::lock_guard<std::mutex> lock(m); // 临界区代码 }
條件變數 (Condition Variable)
條件變數用來通知一個執行緒另一個執行緒滿足特定條件。一個執行緒可以使用 wait()
方法等待條件,而另一個執行緒可以使用 notify_one()
或notify_all()
方法發出訊號。
std::condition_variable cv; bool condition_met = false; void wait_for_condition() { std::unique_lock<std::mutex> lock(m); cv.wait(lock, []() { return condition_met; }); } void signal_condition() { std::lock_guard<std::mutex> lock(m); condition_met = true; cv.notify_one(); }
讀寫鎖(Read-Write Lock)
讀寫鎖定允許多個執行緒同時讀取共享數據,但一次只能有一個執行緒寫入共享數據。
std::shared_lock<std::shared_mutex> lock(m, std::shared_lock<std::shared_mutex>::defer_lock);
實戰案例:共享計數器
考慮一個共享計數器,需要同時支援多個執行緒的增量和獲取操作:
class SharedCounter { std::mutex mutex_; int count_; public: void increment() { std::lock_guard<std::mutex> lock(mutex_); ++count_; } int get() { std::lock_guard<std::mutex> lock(mutex_); return count_; } };
在在這個範例中,mutex_
互斥鎖定用於保護count_
變數。每個執行緒都可以透過 increment()
方法獨立增量計數器,並且可以透過 get()
方法讀取目前值。
以上是C++ 多執行緒程式設計中有哪些常見的執行緒同步機制?的詳細內容。更多資訊請關注PHP中文網其他相關文章!