首頁  >  文章  >  後端開發  >  C++ 多執行緒程式設計中讀寫鎖的用途是什麼?

C++ 多執行緒程式設計中讀寫鎖的用途是什麼?

WBOY
WBOY原創
2024-06-03 11:16:57761瀏覽

多執行緒中,讀寫鎖定允許多個執行緒同時讀取數據,但只允許一個執行緒寫入數據,以提高並發性和資料一致性。 C++ 中的 std::shared_mutex 類別提供了以下成員函數:lock(): 取得寫入存取權限,當沒有其他執行緒持有讀取或寫入鎖定時成功。 lock_read(): 取得讀取存取權限,可與其他讀取鎖定或寫入鎖定同時持有。 unlock(): 釋放寫入存取權限。 unlock_shared(): 釋放讀取存取權限。

C++ 多线程编程中读写锁的用途是什么?

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

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