C++ 为什么在共享互斥锁之前引入共享互斥锁
在C++14中,有as。您必须将其与一起使用。例如:C++ 为什么在共享互斥锁之前引入共享互斥锁,c++,locking,c++14,c++17,mutex,C++,Locking,C++14,C++17,Mutex,在C++14中,有as。您必须将其与一起使用。例如: // 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); pr
// 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);
}
据我所知,shared\u mutex
是在C++17中引入的,比shared\u lock
是在C++14中引入的要晚。如果没有shared\u mutex
,则无法使用shared\u lock
如果当时没有
shared\u mutex
,为什么要在C++14中引入shared\u locked
?在C++14中,有std::shared\u timed\u mutex
,它提供了与std::shared\u mutex
相同的功能,并添加了额外的函数来支持锁超时
因此,您可以将std::shared_lock
与std::shared_timed_mutex
配合使用
起初,人们认为这是所需的全部,但后来实现者指出,他们可以通过省略超时函数来提高性能,因此std::shared_mutex
被作为一个单独的类型添加,但是添加到C++14已经太晚了,所以它被添加到C++17