我有一个由多个线程共享的对象,我想锁定各个成员变量,而不锁定整个对象,以便不同的线程可以访问不同的成员变量同时。 阅读了一些文章后,我使用shared_mutex和getter()/ setter()函数编写代码。C++ getter/setter,互斥锁,细粒度锁定
class Test
{
public:
**// variable, shared_mutex and getter/setter for x**
double x;
boost::shared_mutex x_mutex;
double x_getter();
void x_setter();
**// variable, shared_mutex and getter/setter for y**
......
**// variable, shared_mutex and getter/setter for z**
......
};
double Test::x_getter()
{
// get shared access
boost::shared_lock lock(_access);
return x;
}
void Test::x_setter()
{
// get exclusive access
boost::unique_lock lock(_access);
// do something with x;
}
//getter/setter functions for y and z.
......
该代码看起来笨拙,尤其是当成员变量的数量增加时。我想知道这类问题是否有更好的解决方案。
谢谢。
谢谢你,celtschk,我实现了你的方法,代码看起来更干净。 – 2607 2012-02-22 14:59:42