shared_mutex类是一个同步原语,可用于保护共享数据不被多个线程同时访问。与便于独占访问的其他互斥体类型不同,shared_mutex 拥有两个访问级别: 共享- 多个线程能共享同一互斥体的所有权。 独占- 仅一个线程能占有互斥。 若一个线程已获取独占 锁(通过lock、try_lock),则无其他线程能获取该锁(包括共享的)...
std::shared_mutex使用 std::shared_mutex是C++17引入的一个同步原语,标准库中提供。它设计用于实现读写锁(Read-Write Lock)机制。允许多个线程同时拥有读(共享)锁,但在任何时间点上只允许一个线程拥有写(独占)锁。这种机制非常适合于多读少写的场景,因为它能够最大化读操作的并发性,同时确保写操作的安全性。
若另一线程已经持有该互斥体的独占所有权,则对 lock_shared 的调用将阻塞执行,直到能取得共享所有权。 如果lock_shared 被已经以任何模式(独占或共享)占有 mutex 的线程调用,则行为未定义。 若多于实现定义最大数量的共享所有者已经以共享模式锁定此互斥体,则 lock_shared 阻塞执行,直至共享所有者的数量减少。
http://en.cppreference.com/w/cpp/thread/shared_mutex 互斥量管理类-锁 shared_lock是read lock。搭配std::shared_mutex使用,被锁后仍允许其他线程执行同样被shared_lock的代码。 lock_guard和unique_lock是write lock。被锁后不允许其他线程执行被shared_lock或unique_lock的代码。 通常我们这样定义: typedefstd...
shared_mutex 通常用于多个读线程能同时访问同一资源而不导致数据竞争,但只有一个写线程能访问的情形。 1.认识std::shared_mutex 通过查看该类的接口(https://zh.cppreference.com/w/cpp/thread/shared_mutex),可以看到,该类除了互斥锁定接口,还提供了共享锁定接口。
shared_mutex::~shared_mutex Exclusive locking shared_mutex::lock shared_mutex::try_lock shared_mutex::unlock Shared locking shared_mutex::lock_shared shared_mutex::try_lock_shared shared_mutex::unlock_shared Native handle shared_mutex::native_handlevoid lock(); (since C++17) Acquires...
shared_mutex的适用场景比较特殊:一个或多个读线程同时读取共享资源,且只有一个写线程来修改这个资源,这种情况下才能从shared_mutex获取性能优势。 cppreference文档 http://en.cppreference.com/w/cpp/thread/shared_mutex Shared mutexes are usually used in situations when multiple readers can access the same ...
shared_mutex::lock shared_mutex::try_lock shared_mutex::unlock Shared locking shared_mutex::lock_shared shared_mutex::try_lock_shared shared_mutex::unlock_shared Native handle shared_mutex::native_handlenative_handle_type native_handle(); (since C++17) (not always present) Returns...
https://en.cppreference.com/w/cpp/thread/shared_mutexen.cppreference.com/w/cpp/thread/shared_mutex main.cpp #include<iostream>#include<mutex>#include<shared_mutex>#include<thread>classThreadSafeCounter{public:ThreadSafeCounter()=default;// Multiple threads/readers can read the counter's value...
http://en.cppreference.com/w/cpp/thread/shared_mutex GCC5.1才会支持C++17 std::shared_mutex,替代方案是boost::shared_mutex。 boost::shared_mutex官方文档:http://www.boost.org/doc/libs/1_60_0/doc/html/thread/synchronization.html#thread.synchronization.mutex_types.shared_mutex ...