В чем разница между «мьютексом» и «блокировкой»?

Меня очень смущает разница между блокировкой и мьютексом. В документации Boost сказано:

Типы блокировки

  • Шаблон класса lock_guard
  • Шаблон класса unique_lock
  • Шаблон класса shared_lock
  • Шаблон класса upgrade_lock
  • Шаблон класса upgrade_to_unique_lock
  • Класс, специфичный для Mutex, scoped_try_lock

Типы мьютексов

  • Класс мьютекса
  • 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
}

Обновленные вопросы

  1. Кто-нибудь может дать разъяснение между "мьютексом" и "блокировкой"?
  2. Нужно ли создавать shared_lock для shared_mutex? Что произойдет, если я создам unique_lock для shared_mutex?
  3. Или, если я создам shared_lock для мьютекса, означает ли это, что мьютекс может не разделяться между несколькими потоками?
22
задан 2607 21 February 2012 в 17:50
поделиться