1. 程式人生 > >C++實現執行緒安全的的雙緩衝例項

C++實現執行緒安全的的雙緩衝例項

業務場景:多執行緒的業務系統不斷寫入資料到記憶體中,同步執行緒不斷讀取資料並同步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用於清空緩衝區。