C++實現執行緒安全的的雙緩衝例項
阿新 • • 發佈:2019-01-03
業務場景:多執行緒的業務系統不斷寫入資料到記憶體中,同步執行緒不斷讀取資料並同步redis
設計方案:
由於業務非常適合map的結構,因此採用了雙層map
typedef std::map<int,int> EventCountMap;
typedef std::map<int,EventCountMap> RuleEventCountMap;
為了實現讀寫分離,採用雙緩衝,一個讀,一個寫,由於std::map並不是執行緒安全的,所以讀寫的時候需要加鎖處理。
class BufferProc { public: BufferProc(); ~BufferProc(); int init(); RuleEventCountMap * get(); int set(int key, int field_key, int field_value); void clear(); private: MutexLock buffer_map_mutex; RuleEventCountMap *buffermap_A_ptr; RuleEventCountMap *buffer_map_B_ptr; RuleEventCountMap *buffer_map_producer_ptr; RuleEventCountMap *buffer_map_consumer_ptr; };
init用於初始化雙緩衝,get返回消費者的指標,set用於生產者插入資料,celar用於清空緩衝區。