为什么 shared_locked 在 shared_mutex 之前介绍
Why shared_locked introduced before shared_mutex
在 C++14 中有 shared_lock
as reader-writer lock. This you must use in conjunction with 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);
}
据我了解shared_mutex
是在C++17中引入的,晚于shared_lock
是在C+中引入的+14。没有 shared_mutex
.
就不能使用 shared_lock
如果当时没有shared_mutex
,为什么要在C++14中引入shared_locked
?
在 C++14 中,有 std::shared_timed_mutex
,它提供与 std::shared_mutex
相同的功能,增加了额外的函数来支持锁超时.
因此,您可以将 std::shared_lock
与 std::shared_timed_mutex
一起使用。
最初认为这就是所需的全部内容,但后来实施者指出他们可以通过省略超时功能来提高性能,因此 std::shared_mutex
作为一个单独的类型添加,但这是来不及添加到 C++14,所以它被添加到 C++17。
在 C++14 中有 shared_lock
as reader-writer lock. This you must use in conjunction with 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);
}
据我了解shared_mutex
是在C++17中引入的,晚于shared_lock
是在C+中引入的+14。没有 shared_mutex
.
shared_lock
如果当时没有shared_mutex
,为什么要在C++14中引入shared_locked
?
在 C++14 中,有 std::shared_timed_mutex
,它提供与 std::shared_mutex
相同的功能,增加了额外的函数来支持锁超时.
因此,您可以将 std::shared_lock
与 std::shared_timed_mutex
一起使用。
最初认为这就是所需的全部内容,但后来实施者指出他们可以通过省略超时功能来提高性能,因此 std::shared_mutex
作为一个单独的类型添加,但这是来不及添加到 C++14,所以它被添加到 C++17。