Boost,Mutex,类成员,共享对象成员

时间:2012-02-14 19:10:52

标签: c++ boost

我是多线程编程的新手,如果这看起来太简单,请不要笑。

我有一个简单的类对象,它有几个成员变量,例如

class XYZ
{
public:
int a;
int b;
...
};

xyz是多个线程之间的共享对象,在多个线程之间共享“a”的最佳方式是什么?例如,

在主题A中,我会做类似

的事情
xyz.a = xyz.a + rand();

在主题B中,我会做类似

的事情
xyz.a = xyz.a - rand();

我听说创建一个互斥体作为一个类成员,有人可以举一个简单的例子来说明这一点。

如何创建允许多个线程安全访问其成员的类接口?

2 个答案:

答案 0 :(得分:1)

如果使用指针,可以使用boost::shared_ptr<O>(其中O是指针的对象类)。

对于那些整数,您可以使用:boost:atomic<int>

答案 1 :(得分:1)

您可以使用互斥锁。它们只能同时被一个线程锁定。

class XYZ
{
    int a,b;
    boost::mutex mutex;
}

然后用于线程代码

void thread(XYZ *xyz)
{
  //....

  // now a member of xyz should be accessed/changed.
  { 
    boost::unique_lock<boost::mutex> lock(xyz->mutex); // lock first the mutex
    // do something with members of xyz
    // ...
  } // mutex automatically freed because lock object destroyed

  //...
 }