C++锁机制
多线程并发时对锁机制需要有一定了解。
c++的锁包含两部分:同步原语和RAII封装器。
同步原语有std::mutex、std::shared_mutex、std::timed_mutex、std::recursive_mutex、std::shared_timed_mutex 和 std::recursive_timed_mutex等;
RAII 封装器包含 std::unique_lock、std::lock_guard 和 std::shared_lock等。
std::mutex 是能用于保护共享数据免受从多个线程同时访问的同步原语,也就是最常见的互斥锁概念。
std::shared_mutex 同样也可用于保护共享数据不被多个线程同时访问。但是与 std::mutex 等其他互斥类型不同,std::shared_mutex 拥有二个访问级别:
- 共享 - 多个线程能共享同一互斥的所有权。
- 独占性 - 仅一个线程能占有互斥。
std::shared_mutex 比一般的 std::mutex 多了函数 lock_shared() / unlock_shared(),允许多个(读者)线程同时加锁、解锁,而 std::shared_lock 则相当于共享版的 std::lock_guard。
对 std::shared_mutex 使用 std::lock_guard 或 std::unique_lock 就达到了写者独占的目的。
因此 std::shared_mutex 是C+