在Windows环境中,使用WinAPI的关键部分或其他东西是Boost的作用域互斥体吗?
答案 0 :(得分:20)
当前版本的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()
成员函数的任何类型,因此如果需要,您可以将它们与进程间互斥锁一起使用。
答案 1 :(得分:2)
Win32的CRITICAL_SECTION只能在单个进程的线程中使用。如果需要在进程之间使用某些东西,则需要使用互斥锁。 Boost对关键部分一无所知,所以我认为它是使用互斥锁。
“scoped”只是意味着它有一个包装器,它使用RAII在特定范围的末尾自动解锁互斥锁。