c++ - 如何使用 Boost 创建临界区?

标签 c++ multithreading boost synchronization critical-section

对于我的跨平台应用程序,我已经开始使用 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/

相关文章:

C# 多线程从主数组更新/读取

c++ - 为什么const成员函数可以通过成员指针调用非const成员函数?

c++ - 停靠时不应用 QDockWidget::background-color

c++ - STL列表,删除所有奇数

Windows:Boost 和 CMake

c++ - ublas::vector push_back 在哪里?

c++ - 把boost::ptr_vector<char>::iterator itr转换成里面的数据?

c++ - shared_ptr 与 unique_ptr 在类(class)和 child 中的使用

javascript - Node.js 如何使用更少的线程来处理多个连接?

java - 并发修改异常