一, 線程之間的資源管理(LOCK)
critical section是每個線程中訪問臨界資源的那段代碼,不論是硬件臨界資源,還是軟件臨界資源,多個線程必須互斥地對它進行訪問。使用
void Shared::Act () throw (char *)
{
Lock lock (_critSect);
// perform action —— may throw
// automatic destructor of lock
}
控制臨界區域對象的封裝
為被管理對象增加管理方法class CritSect
{
//友元類
friend class Lock;
public:
CritSect () { InitializeCriticalSection (&_critSection); }
~CritSect () { DeleteCriticalSection (&_critSection); }
private:
void Acquire ()
{
EnterCriticalSection (&_critSection);
}
void Release ()
{
LeaveCriticalSection (&_critSection);
}
private:
//臨界區域
CRITICAL_SECTION _critSection;
};
定義鎖
在自身聲明週期中,對被管理資源進行鎖定class Lock
{
public:
Lock (CritSect& critSect) : _critSect (critSect)
{
_critSect.Acquire ();
}
~Lock ()
{
_critSect.Release ();
}
private
CritSect & _critSect;
};