設計模式C 實現 監視器物件

2021-09-07 14:24:45 字數 1063 閱讀 8360

監視器物件設計模式使併發方法的執行同步化,以確保任一時刻僅有乙個方法在物件內執行。別名執行緒安全被動物件。

問題場景:應用程式包含被多個執行緒併發呼叫的物件。這些方法通常修改其物件的內部狀態。為了併發執行緒內正確執行,有必要對物件的訪問進行同步和排程。如果客戶機必須顯示的獲取和釋放底層同步機制,如訊號、互斥或條件變數。那麼併發應用程式更難程式設計。因此,物件應該負責確保它們需要同步的任何方法被透明的序列化。 

**示例:

#include #include #include #include #include #include using namespace std; class mutex  virtual ~mutex()  void lock()  void unlock()  pthread_mutex_t* getlock()  private: pthread_mutex_t _lock; }; class treadcond  virtual ~treadcond()  void condnotify()  void condwait(pthread_mutex_t* lock)  private: pthread_cond_t m_cond; }; class scopedlock  ~scopedlock()  private: mutex& _mutex_obj; }; class messagequeue ; public: messagequeue(int size = max_size): m_size(size), m_mesagecount(0)  ~messagequeue()  void put(int value)  bool empt()  bool full()  private: bool i_empt()  bool i_full()  void i_put(int value)  private: int m_size; int m_array[max_size]; int m_mesagecount; mutex m_mutex; treadcond m_notemptycond; treadcond m_notfullcond; }; messagequeue g_queue; void *pthr_fun1(void *arg) 

物件導向設計基礎 監視器

1 使用場景 乙個物件可能要訪問共享資源來完成它所要提供的服務,在多執行緒情況下,多個這樣的物件在一起就會產生意想不到的後果,比如競爭。監視器就是在這樣的乙個物件上設定乙個鎖,以保證在給定時間內,只有乙個執行緒可以執行這個物件上的任何乙個方法。2 例子 我們建立乙個日誌記錄的類 public cla...

C 寫「監視器」

using system using system.io class watcher create a new filesystemwatcher and set its properties.filesystemwatcher watcher new filesystemwatcher watch...

監視器和物件鎖

引用自 監視器好比一做建築,它有乙個很特別的房間,房間裡有一些資料,而且在同一時間只能被乙個執行緒佔據,進入這個建築叫做 進入監視器 訪問資源時 進入建築中的那個特別的房間叫做 獲得監視器 可以訪問資源時 佔據房間叫做 持有監視器 可以訪問資源,並獲得資源鎖 離開房間叫做 釋放監視器 釋放鎖 離開建...