Есть ли разница между областью действия мьютекса Boost и критической секцией WinAPi?


В среде Windows мьютекс Boost имеет область действия, использующую критические разделы WinAPI, или что-то еще?

2 9

2 ответа:

Текущая версия boost::mutex не использует ни Win32 CRITICAL_SECTION, ни мьютекс Win32. Вместо этого он использует атомарные операции и событие Win32 для блокировки ожидания.

Более старые версии (boost 1.34.1 и более ранние) были оберткой вокруг 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 для автоматического разблокирования мьютекса в конце определенной области.