Есть ли разница между областью действия мьютекса Boost и критической секцией WinAPi?
В среде Windows мьютекс Boost имеет область действия, использующую критические разделы WinAPI, или что-то еще?
2 ответа:
Текущая версия
Более старые версии (boost 1.34.1 и более ранние) были оберткой вокругboost::mutex
не использует ни Win32CRITICAL_SECTION
, ни мьютекс Win32. Вместо этого он использует атомарные операции и событие Win32 для блокировки ожидания.CRITICAL_SECTION
в Windows.Кстати, сам мьютекс не ограничен. Тип
boost::mutex::scoped_lock
и, в последних версиях,boost::lock_guard<boost::mutex>
иboost::unique_lock<boost::mutex>
предоставляют RAII-оболочки для блокировки мьютекса, чтобы гарантировать, что вы не забудете его разблокировать.Шаблоны
boost::lock_guard<>
иboost::unique_lock<>
работают с любым типом с функциями-членамиlock()
иunlock()
, так что вы можете использовать их с межпроцессными мьютексами, если хотите.
Win32 CRITICAL_SECTION может использоваться только среди потоководного процесса . Если вам нужно использовать что-то между процессами, вам нужен мьютекс. Boost ничего не говорит о критических разделах, поэтому я бы предположил, что он использует мьютексы.
"scoped" просто означает, что у него есть оболочка, которая использует RAII для автоматического разблокирования мьютекса в конце определенной области.