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用于清空缓冲区。

代码详见:https://github.com/mooncreeks/threadSafeBuffer

猜你喜欢

转载自blog.csdn.net/yuexiaxiaoxi27172319/article/details/81153421