9

在 Windows 环境中,Boost 的作用域互斥锁是使用 WinAPI 的关键部分还是其他什么?

4

2 回答 2

20

当前版本boost::mutex既不使用 Win32CRITICAL_SECTION也不使用 Win32 Mutex。相反,它使用原子操作和 Win32 事件来阻塞等待。

旧版本(boost 1.34.1 和更早版本)是CRITICAL_SECTIONWindows 上的包装器。

顺便说一句,互斥锁本身没有作用域。boost::mutex::scoped_lock类型和,在最近的版本中,并boost::lock_guard<boost::mutex>提供boost::unique_lock<boost::mutex>RAII 包装器用于锁定互斥锁,以确保您不会忘记解锁它。

boost::lock_guard<>and模板适用于任何类型的boost::unique_lock<>withlock()unlock()成员函数,因此如果需要,您可以将它们与进程间互斥体一起使用。

于 2009-05-18T15:12:26.003 回答
2

Win32 的 CRITICAL_SECTION 只能在单个进程的线程之间使用。如果您需要在进程之间使用某些东西,则需要一个互斥锁。Boost 对关键部分只字未提,所以我认为它正在使用互斥锁。

“作用域”只是意味着它有一个包装器,它使用RAII在特定作用域的末尾自动解锁互斥锁。

于 2009-05-18T13:02:36.687 回答