为什么在 shared_mutex 之前引入了 shared_locked

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 中引入?

Ant*_*ams 8

在 C++14 中,有std::shared_timed_mutex,它提供与 相同的功能std::shared_mutex并添加了额外的函数来支持锁超时

因此std::shared_lock,您可以std::shared_timed_mutex很好地使用。

最初认为这就是所需要的,但后来实现者指出他们可以通过省略超时函数来提高性能,因此std::shared_mutex被添加为单独的类型,但添加到 C++14 为时已晚,所以它被添加到 C++17 中。