CopyOnWrite容器

来源:互联网 发布:淘宝奖池怎么设置 编辑:程序博客网 时间:2024/06/10 05:34

设计思路:

在修改容器的时候,先将原来的内容copy到一个新容器里,然后在新容器里进行修改,修改成功之后,将容器指针指向新容器指针。

这是一种读写分离的方法,读和写不同的容器。

这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。

示例代码:

#include <pthread.h>#include <map>template<class K, class V>class CopyOnWriteMap{private:    std::map<K, V> *internalMap;    pthread_mutex_t lock;public:    CopyOnWriteMap()    {           internalMap = new std::map<K, V>();        pthread_mutex_init(&lock, NULL);    }       ~CopyOnWriteMap()    {           delete internalMap;        pthread_mutex_destroy(&lock);    }       void put(K key, V value)    {           pthread_mutex_lock(&lock);        std::map<K, V> *writeMap = new std::map<K, V>(*internalMap);        writeMap->insert(std::pair<K, V>(key, value));        std::map<K, V> *tmp = internalMap;        internalMap = writeMap;        delete tmp;        pthread_mutex_unlock(&lock);     }       V get(K key)    {           return internalMap[key];    }   };


CopyOnWrite容器有很多优点,但是同时也存在两个问题,即内存占用问题和数据一致性问题。所以在开发的时候需要注意一下。


ref:coolshell


0 0
原创粉丝点击