監視器物件設計模式使併發方法的執行同步化,以確保任一時刻僅有乙個方法在物件內執行。別名執行緒安全被動物件。
問題場景:應用程式包含被多個執行緒併發呼叫的物件。這些方法通常修改其物件的內部狀態。為了併發執行緒內正確執行,有必要對物件的訪問進行同步和排程。如果客戶機必須顯示的獲取和釋放底層同步機制,如訊號、互斥或條件變數。那麼併發應用程式更難程式設計。因此,物件應該負責確保它們需要同步的任何方法被透明的序列化。
**示例:
#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...
監視器和物件鎖
引用自 監視器好比一做建築,它有乙個很特別的房間,房間裡有一些資料,而且在同一時間只能被乙個執行緒佔據,進入這個建築叫做 進入監視器 訪問資源時 進入建築中的那個特別的房間叫做 獲得監視器 可以訪問資源時 佔據房間叫做 持有監視器 可以訪問資源,並獲得資源鎖 離開房間叫做 釋放監視器 釋放鎖 離開建...