【发布时间】:2012-02-27 17:21:41
【问题描述】:
我的应用程序被划分为一些较小的域,为了减少它们之间的依赖关系,我将使用上下文对象。让我们考虑一个简单的例子:
class SomeType1;
class SomeType2;
class dummy;
//context for first domain
class foo
{
public:
virtual void setPtr1 (SomeType1* val) = 0;
virtual SomeType2* getPtr2 () = 0;
static foo* getCTX()
{
//statement bellow is a singleton which creates one instance of dummy and
//returns its address as foo*
return AppCTX::AccessorType<dummy>::getCTX<foo>();
}
virtual ~foo();
};
//context for second domain
class bar
{
public:
virtual void setPtr2 (SomeType2* val) = 0;
virtual SomeType1* getPtr1 () = 0;
static bar* getCTX()
{
//same as above but casts dummy* to bar*
return AppCTX::AccessorType<dummy>::getCTX<bar>();
}
virtual ~bar();
};
//dummy is a singleton created in AppCTX::AccessorType<dummy>
class dummy: public foo, public bar
{
public:
virtual void setPtr1 (SomeType1* val)
{
ptr1 = val;
}
virtual SomeType1* getPtr1 ()
{
return ptr1;
}
virtual void setPtr2 (SomeType2* val)
{
ptr2 = val;
}
virtual SomeType2* getPtr2 ()
{
return ptr2;
}
virtual ~dummy();
private:
SomeType1* ptr1;
SomeType2* ptr2;
};
我的域启动多个使用上下文的线程,因此 ptr1 和 ptr2 可以并行访问。我需要将 setPtrs 和 getPtrs 与互斥锁同步吗? ptr1 和 ptr2 是否有可能以某种方式损坏?
【问题讨论】:
标签: c++ multithreading synchronization mutex