少なくともC++でのマルチスレッドの基本については十分に理解していると思いますが、コンストラクターまたはデストラクタで共有リソースの周りにミューテックスをロックすることについて明確な答えを得ることができませんでした。私はあなたが両方の場所でロックするべきであるという印象を受けました、しかし最近同僚は同意しませんでした。次のクラスが複数のスレッドによってアクセスされているふりをします。
class TestClass
{
public:
TestClass(const float input) :
mMutex(),
mValueOne(1),
mValueTwo("Text")
{
//**Does the mutex need to be locked here?
mValueTwo.Set(input);
mValueOne = mValueTwo.Get();
}
~TestClass()
{
//Lock Here?
}
int GetValueOne() const
{
Lock(mMutex);
return mValueOne;
}
void SetValueOne(const int value)
{
Lock(mMutex);
mValueOne = value;
}
CustomType GetValueTwo() const
{
Lock(mMutex);
return mValueOne;
}
void SetValueTwo(const CustomType type)
{
Lock(mMutex);
mValueTwo = type;
}
private:
Mutex mMutex;
int mValueOne;
CustomType mValueTwo;
};
もちろん、初期化リストを通じてすべてが安全である必要がありますが、コンストラクター内のステートメントについてはどうでしょうか。デストラクタでは、スコープなしのロックを実行し、ロックを解除しない(基本的にはpthread_mutex_destroyを呼び出すだけ)と便利ですか?