我是多线程编程的新手,如果这看起来太简单,请不要笑。
我有一个简单的类对象,它有几个成员变量,例如
class XYZ
{
public:
int a;
int b;
...
};
xyz是多个线程之间的共享对象,在多个线程之间共享“a”的最佳方式是什么?例如,
在主题A中,我会做类似
的事情xyz.a = xyz.a + rand();
在主题B中,我会做类似
的事情xyz.a = xyz.a - rand();
我听说创建一个互斥体作为一个类成员,有人可以举一个简单的例子来说明这一点。
如何创建允许多个线程安全访问其成员的类接口?
答案 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
//...
}