多執行緒中,讀寫鎖定允許多個執行緒同時讀取數據,但只允許一個執行緒寫入數據,以提高並發性和資料一致性。 C++ 中的 std::shared_mutex 類別提供了以下成員函數:lock(): 取得寫入存取權限,當沒有其他執行緒持有讀取或寫入鎖定時成功。 lock_read(): 取得讀取存取權限,可與其他讀取鎖定或寫入鎖定同時持有。 unlock(): 釋放寫入存取權限。 unlock_shared(): 釋放讀取存取權限。
C++ 多執行緒程式設計中讀寫鎖定的用途
概述
#在多執行緒程式設計中,讀寫鎖是一種同步機制,它允許多個執行緒同時讀取共享數據,但只能有一個執行緒寫入共享資料。這有助於提高並發性,同時確保數據的一致性。
實作
C++ 中的 std::shared_mutex
類別實作了讀寫鎖定。它提供以下成員函數:
lock()
: 取得鎖定的寫入存取權。只有當沒有其他執行緒持有讀取或寫入鎖定時,此函數才成功。 lock_read()
: 取得鎖定的讀取存取權。可與其他讀取鎖或寫入鎖同時持有。 unlock()
: 釋放鎖定的寫入存取權。 unlock_shared()
: 釋放鎖定的讀取存取權。 範例用法
考慮以下程式碼,它使用讀寫鎖定來保護一個共享變數:
#include <iostream> #include <shared_mutex> std::shared_mutex m; int shared_var = 0; void reader() { m.lock_read(); std::cout << "Reading: " << shared_var << '\n'; m.unlock_shared(); } void writer() { m.lock(); std::cout << "Writing: " << ++shared_var << '\n'; m.unlock(); } int main() { std::thread t1(reader); std::thread t2(writer); std::thread t3(reader); t1.join(); t2.join(); t3.join(); }
輸出:
Reading: 0 Writing: 1 Reading: 1
以上是C++ 多執行緒程式設計中讀寫鎖的用途是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!