Почему shared_locked введен раньше, чем shared_mutex - PullRequest
3 голосов
/ 24 января 2020

В C ++ 14 есть shared_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);
}

Насколько я понимаю, shared_mutex был введен в C ++ 17 , позже, чем shared_lock был введен в C ++ 14 . Вы не можете использовать shared_lock без shared_mutex.

Почему shared_locked был введен в C ++ 14, если в то время не было shared_mutex?

1 Ответ

7 голосов
/ 24 января 2020

В C ++ 14 было std::shared_timed_mutex, которое предоставляет те же возможности, что и std::shared_mutex, , с добавлением дополнительных функций для поддержки тайм-аутов при блокировках .

Поэтому вы могли бы использовать std::shared_lock с std::shared_timed_mutex просто отлично.

Первоначально считалось, что это все, что требовалось, но затем разработчики указали, что они могут улучшить производительность, исключив функции тайм-аута, поэтому std::shared_mutex был добавлен как отдельный тип, но было слишком поздно добавлять его в C ++ 14, поэтому он был добавлен в C ++ 17.

...