Я очень смущен разницей между блокировкой и мьютексом. В Boost docs говорится:
Типы блокировки
- Шаблон класса lock_guard
- Шаблон класса unique_lock
- Шаблон класса shared_lock
- Шаблон класса upgrade_lock
- Шаблон класса upgrade_to_unique_lock
- Класс, специфичный для Mutex scoped_try_lock
Типы Mutex
- Мьютекс класса
- Typedef try_mutex
- Класс timed_mutex
- Класс recursive_mutex
- Typedef recursive_try_mutex
- Класс recursive_timed_mutex
- Класс shared_mutex
В другой статье я вижу такие функции, как
boost::shared_mutex _access;
void reader()
{
boost::shared_lock< boost::shared_mutex > lock(_access);
// do work here, without anyone having exclusive access
}
void conditional_writer()
{
boost::upgrade_lock< boost::shared_mutex > lock(_access);
// do work here, without anyone having exclusive access
if (something) {
boost::upgrade_to_unique_lock< boost::shared_mutex > uniqueLock(lock);
// do work here, but now you have exclusive access
}
// do more work here, without anyone having exclusive access
}
Обновленные вопросы
- Может ли кто-нибудь предложить некоторые пояснения между "мьютексом" и "блокировкой"?
- Необходимо ли создать shared_lock для shared_mutex? Что произойдет, если я создам unique_lock для shared_mutex?
- Или, если я создаю shared_lock для мьютекса, означает ли это, что мьютекс может не разделяться между несколькими потоками?