SCritical クラス

クリティカルセクションをラップしたクラスです。シンプルな実装です。
更新日 2014-07-29

仕様

クリティカルセクション(マルチスレッドアプリで、相互排他処理を実現する為のイベントオブジェクト) をクラスにまとめたものです。 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;
};