1

假设有一个用户定义的类MyClass,它有一个 setter 和一个 getter 函数。

class MyClass {
    int m_value;
    public:
        void set(int value)
        { m_value = value; }

        int get() const
        { return m_value;}
};

并且有一个函数increment()可以将对象的值加1,可以在多个线程中调用。

void increment(MyClass& myClass)
{
    myClass.set(myClass.get() + 1);
}

使此函数线程安全的最佳方法是什么?只使用锁?有没有办法通过使用一些类似 CAS 的操作来实现它?

4

2 回答 2

2

如果您使用的是C++11,则可以只使用std::atomic<int>提供原子加载存储增量的 which 似乎是您需要的一切。

我怀疑您不需要原子,尽管在大多数情况下它们会比您的基本互斥锁慢。

在做出决定之前,请查看其他问题。

于 2013-10-08T04:35:24.827 回答
-3

使用 std::mutex 并享受

    #include <mutex>

    class MyClass 
    {
        int m_value;
        std::mutex mtx;

        void set(int value) 
        {
            mtx.lock();
            m_value = value;
            mtx.unlock();
        }

        int get() const 
        {
            return m_value;
        }
    } 
于 2013-10-08T04:47:31.443 回答