在Windows环境下,Boost的作用域互斥锁使用WinAPI的临界段(critical sections)吗?还是其他什么东西?
boost::mutex
的当前版本既不使用Win32 CRITICAL_SECTION
,也不使用Win32 Mutex。相反,它使用原子操作和Win32事件进行阻塞等待。
旧版本(boost 1.34.1及以前)在Windows上是CRITICAL_SECTION
的包装器。
顺便说一下,互斥锁本身没有作用域。在最近的版本中,boost::mutex::scoped_lock
类型以及boost::lock_guard<boost::mutex>
和boost::unique_lock<boost::mutex>
提供了RAII包装器来锁定互斥锁,以确保您不会忘记解锁。
boost::lock_guard<>
和boost::unique_lock<>
模板与具有lock()
和unlock()
成员函数的任何类型一起使用,因此如果需要,可以将它们用于跨进程互斥锁。
WaitForSingleObject
函数来等待一个win32事件(使用CreateEvent
创建)。 - Anthony WilliamsWin32的CRITICAL_SECTION只能在单个进程的线程之间使用。如果需要在进程之间使用某些内容,则需要一个互斥量。Boost对关键部分没有任何说明,因此我认为它使用互斥量。
“scoped”只是意味着它有一个包装器,使用RAII自动解锁特定范围结束时的互斥量。