CopyOnWrite容器

设计思路:

在修改容器的时候,先将原来的内容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


你可能感兴趣的:(C++,软件开发,copyonwrite)