Это действительно очень просто. unique_lock
вызывает lock()
на мьютексе. shared_lock
вызывает shared_lock()
.
Разница между ними в том, что shared_lock
предназначен для поддержки считывателей в блокировке чтения / записи. У вас может быть несколько потоков, которые получают общую блокировку и читают одни и те же данные, но если кто-то хочет записать в данные, им нужно использовать lock
, чтобы получить разрешение на запись в данные.
Какой именно что вы должны использовать, зависит от шаблона, который вы ищете. Во многих случаях требуется блокировка чтения / записи (поэтому стандарт включает их поддержку). Бывают случаи, когда требуется простой уникальный мьютекс. В общем, если чтение и запись являются для вас значимыми понятиями, есть большая вероятность, что мьютекс чтения / записи, такой как shared_timed_mutex
, будет правильным подходом.