Sha*_*yan 3 c++ mutex locking c++14 c++17
在 C++14 中有shared_lock作为reader-writer lock。这必须与shared_mutex. 例子:
// my shared data
std::shared_mutex mut;
Data data;
void process_data(const Data *); // read-only function
void update_data(Data *);
// multiple threads can read data
void read_data(){
std::shared_lock lk(mut);
process_data(&data);
}
// only one thread can read data
void write_data(){
std::unique_lock lk(mut); // exclusive lock
update_data(&data);
}
Run Code Online (Sandbox Code Playgroud)
据我所知shared_mutex是在C++17shared_lock中引入的,比在C++14 中引入的晚。您不能使用shared_lock没有shared_mutex。
shared_locked如果当时没有shared_mutex,为什么要在 C++14 中引入?
在 C++14 中,有std::shared_timed_mutex,它提供与 相同的功能std::shared_mutex,并添加了额外的函数来支持锁超时。
因此std::shared_lock,您可以std::shared_timed_mutex很好地使用。
最初认为这就是所需要的,但后来实现者指出他们可以通过省略超时函数来提高性能,因此std::shared_mutex被添加为单独的类型,但添加到 C++14 为时已晚,所以它被添加到 C++17 中。