首頁  >  文章  >  後端開發  >  C++ 多執行緒程式設計中有哪些常見的執行緒同步機制?

C++ 多執行緒程式設計中有哪些常見的執行緒同步機制?

WBOY
WBOY原創
2024-06-03 20:13:00881瀏覽

C++ 多執行緒程式設計中,執行緒同步機制必不可少,主要有三種類型:互斥鎖 (Mutex):用於保護共享資源的獨佔存取。條件變數 (Condition Variable):用於通知執行緒特定條件已滿足。讀寫鎖 (Read-Write Lock):允許多個執行緒同時讀取共享數據,但一次只能有一個執行緒寫入。

C++ 多线程编程中有哪些常见的线程同步机制?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn