【发布时间】:2012-02-21 21:02:11
【问题描述】:
我有一个由多个线程共享的对象,我想锁定单个成员变量,而不锁定整个对象,以便不同的线程可以同时访问不同的成员变量。 在阅读了一些文章之后,我使用 shared_mutex 和 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.
......
代码看起来很笨拙,尤其是当成员变量的数量增加时。我想知道对于这类问题是否有更好的解决方案。
谢谢。
【问题讨论】:
标签: c++ multithreading boost mutex boost-thread