Есть ли разница между мьютексом Boost и критическим разделом WinAPi? - PullRequest
9 голосов
/ 18 мая 2009

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

Ответы [ 2 ]

20 голосов
/ 18 мая 2009

Текущая версия boost::mutex не использует ни Win32 CRITICAL_SECTION, ни Win32 Mutex. Вместо этого он использует атомарные операции и событие 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(), поэтому при желании их можно использовать с мьютексами между процессами.

2 голосов
/ 18 мая 2009

Win32 CRITICAL_SECTION можно использовать только среди потоков одного процесса . Если вам нужно что-то использовать между процессами, вам нужен мьютекс. Boost ничего не говорит о критических секциях, поэтому я предполагаю, что он использует мьютексы.

«scoped» означает, что у него есть оболочка, которая использует RAII для автоматической разблокировки мьютекса в конце определенной области.

...