#排他制御の種類(windows)
クリティカルセクション
ミューテックス
セマフォ
ファイル
#排他制御はオブジェクト指向で!
C++ではコンストラクタとデストラクタというのがあり、これを使った排他制御が便利です。
ロックの解放忘れることもありません。
functionの中でインスタンス生成時にコンストラクタでロックし、
functionが終了すればインスタンス消滅時にデストラクタでロック解除する。
そんなプログラムを書いてみました。
#基本ファイル
- Lock.h
-
class LockObject { public: LockObject() {} virtual ~LockObject() {} virtual void Lock() = 0; virtual void Unlock() = 0; }; class Lock { private: LockObject *pLock; public: Lock(LockObject *obj) { pLock = obj; pLock->Lock(); }; ~Lock(){ pLock->Unlock(); } };
- CriticalLock.h
-
#include <windows.h> #include "Lock.h" class CriticalLock : public LockObject { private: CRITICAL_SECTION CritSect; public: CriticalLock(); virtual ~CriticalLock(); virtual void Lock(); virtual void Unlock(); };
- CriticalLock.cpp
-
CriticalLock::CriticalLock() { InitializeCriticalSection(&CritSect); } CriticalLock::~CriticalLock() { DeleteCriticalSection(&CritSect); } void CriticalLock::Lock(void) { EnterCriticalSection(&CritSect); } void CriticalLock::Unlock(void) { LeaveCriticalSection(&CritSect); }
- 使い方
-
#include <windows.h> #include <Lock.h> CriticalLock cObj; void hoge(){ Lock lk(&cObj); ここは排他制御で1スレッドしか実行できません }