如何使用boost在C ++多线程程序中安全地控制类方法访问?

时间:2011-11-29 17:06:37

标签: java c++ multithreading boost

我想将一些Java代码翻译成C ++。其中一个Java类扩展了Thread类,并包含以下方法:

 public static synchronized String createUniqueID() {
    //some code here
}

如何使用Boost在C ++中同步(在Java意义上)类方法?我已经阅读过使用boost::mutex来同步对共享数据的访问,但我不知道如何将它应用于C ++类方法。

3 个答案:

答案 0 :(得分:4)

以下等同于C ++中的Java synchronized方法。事实上,它完全相同,但有明显的例外,它是用不同的语言和不同的线程库编写的。

class Thing {
  public:
    static std::string createUniqueId () {
        boost::unique_lock<boost::mutex> synchronized(mutex_);
        // ... generate a unique id here.
    }

  protected:
    static boost::mutex mutex_;
};

请注意,互斥锁是受保护的,而不是私有,允许您在子类中使用相同的互斥锁(如您所愿)。

答案 1 :(得分:0)

使用静态(即类)互斥。

答案 2 :(得分:0)

实际上我不明白你说的是什么“但我不知道如何将它应用于C ++类方法”

boost::mutex

你想要使用,你必须声明。现在没有生效 你必须使用

`boost::mutex::scoped_lock `

实现它 它可以自动解锁