对于我的跨平台应用程序,我已经开始使用 Boost,但我无法理解如何实现代码来重现 Win32 的临界区或 .Net 的 lock
的行为。
我想写一个方法 Foo
可以从不同的线程调用来控制对共享字段的写操作。应允许同一线程内的递归调用(Foo() -> Foo())。
在 C# 中这个实现非常简单:
object _synch = new object();
void Foo()
{
lock (_synch) // one thread can't be lock by him self, but another threads must wait untill
{
// do some works
if (...)
{
Foo();
}
}
}
最佳答案
借助 boost,您可以使用 boost::lock_guard<> 类:
class test
{
public:
void testMethod()
{
// this section is not locked
{
boost::lock_guard<boost::recursive_mutex> lock(m_guard);
// this section is locked
}
// this section is not locked
}
private:
boost::recursive_mutex m_guard;
};
PS 这些类位于 Boost.Thread图书馆。
关于c++ - 如何使用 Boost 创建临界区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7066669/