멀티스레딩에서 읽기-쓰기 잠금을 사용하면 여러 스레드가 동시에 데이터를 읽을 수 있지만 동시성과 데이터 일관성을 향상시키기 위해 하나의 스레드만 데이터를 쓸 수 있습니다. C++의 std::shared_mutex 클래스는 다음 멤버 함수를 제공합니다. lock(): 쓰기 액세스를 얻고, 읽기 또는 쓰기 잠금을 보유한 다른 스레드가 없으면 성공합니다. lock_read(): 다른 읽기 잠금이나 쓰기 잠금과 동시에 보유할 수 있는 읽기 액세스 권한을 얻습니다. Unlock(): 쓰기 액세스를 해제합니다. Unlock_shared(): 읽기 액세스를 해제합니다.
C++ 다중 스레드 프로그래밍에서 읽기-쓰기 잠금 사용
개요
멀티 스레드 프로그래밍에서 읽기-쓰기 잠금은 여러 스레드가 공유 데이터를 읽을 수 있도록 허용하는 동기화 메커니즘입니다. 그러나 하나의 스레드만 공유 데이터에 쓸 수 있습니다. 이는 데이터 일관성을 보장하면서 동시성을 향상시키는 데 도움이 됩니다.
Implementation
C++의 std::shared_mutex
클래스는 읽기-쓰기 잠금을 구현합니다. 다음과 같은 멤버 함수를 제공합니다: std::shared_mutex
类实现了读写锁。它提供以下成员函数:
lock()
: 获取锁定的写入访问权限。只有当没有其他线程持有读取或写入锁时,此函数才成功。lock_read()
: 获取锁定的读取访问权限。可以与其他读取锁或写入锁同时持有。unlock()
: 释放锁定的写入访问权限。unlock_shared()
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!