淺談C++資源管理

一, 線程之間的資源管理(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;

};