Boost的scute mutex和WinAPi的关键部分之间有区别吗?

时间:2009-05-18 12:52:20

标签: c++ multithreading boost mutex critical-section

在Windows环境中,使用WinAPI的关键部分或其他东西是Boost的作用域互斥体吗?

2 个答案:

答案 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在特定范围的末尾自动解锁互斥锁。