用于写时复制对象的线程安全makeUnique函数

时间:2017-08-18 17:43:25

标签: c++ multithreading

我想创建一个线程安全的写时复制对象。我想要一个函数makeUnique来检查引用计数器:如果它是1,它什么都不做。如果它不是1,则它克隆数据。一个基本的非线程安全实现可能是这样的:

class COW {
    private:
        struct Data {
            int refCount;
            // various other members
        };
        Data *m_data;
    public:
        void makeUnique() {
            if (m_data->refCount!=1) {
                Data *newData = m_data->clone(); // returns a cloned data, with refCount==1
                decRef(m_data);
                m_data = newData;
            }
        }
};

哪种方法可以使这种线程安全?我的目标是x86和ARMv7 +。

基本上,我认为我需要一个原子“比较和减少”操作,这可以通过循环中的比较和交换来完成。有没有更高效的方法(考虑我的目标平台)?

0 个答案:

没有答案