Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么在共享互斥锁之前引入共享互斥锁_C++_Locking_C++14_C++17_Mutex - Fatal编程技术网

C++ 为什么在共享互斥锁之前引入共享互斥锁

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

在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);
    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