仕様
クリティカルセクション(マルチスレッドアプリで、相互排他処理を実現する為のイベントオブジェクト) をクラスにまとめたものです。
2つのメソッドだけを備えます。シングルスレッドでビルドすると、何も展開されません。
ソースコード
メソッド
SCritical インスタンスに対してロックとその解除を行います。
Lock()
クリティカルセクションをロックします。ロックしてる間、別スレッドからのLock() 呼び出しは文字通り
ロック解除されるまで待機させられます。処理が終わったら必ずUnLock() を呼び出してロック解除をしてください。
(Lock とUnLock は必ず対で呼び出す事をお忘れなく)
SCritical ss;
ss.Lock();
UnLock()
クリティカルセクションのロックを解除します。
SCritical ss;
SCritical::UnLock();
使用例
ご利用に際し参考下さい。
継承による実装
このクラスのインスタンスをメンバに持つか、派生させて使います。Lock() → UnLock() の間は、別のスレッドからのLock() は待機になります。
class TestClass : protected SCritical
{
public:
TestClass(){ this->m_nValue = 0; }
~TestClass(){}
void setInt( int nValue )
{
this->SCritical::Lock(); // ←ロック。
{
this->m_nValue = nValue;
}
this->SCritical::UnLock(); // ←ロックを解除。
}
int getInt()
{
int nRet = -1;
this->SCritical::Lock(); // ←ロック。
{
nRet = this->m_nValue;
}
this->SCritical::UnLock(); // ←ロックを解除。
return nRet;
}
private:
int m_nValue;
};