std :: atomic和std :: mutex之间的区别

时间:2016-09-21 12:56:07

标签: multithreading c++11 thread-safety mutex stdatomic

how to use std::atomic<>

在上面的问题中,显然我们可以使用<table id="cacheTable" class="table-striped"> </table>来保持线程安全。我想知道何时使用哪一个。

std::mutex

classs A
{
    std::atomic<int> x;

public:
    A()
    {
        x=0;
    }

    void Add()
    {
        x++;
    }

    void Sub()
    {
        x--;
    }     
};

1 个答案:

答案 0 :(得分:5)

根据经验,对于POD类型使用std::atomic,其中基础专业化将能够使用巧妙的东西,如CPU上的总线锁(这将不会给您带来比管道转储更多的开销),甚至旋转锁。在某些系统上,int可能已经是原子的,因此std::atomic<int>会有效地专注于int

对非POD类型使用std::mutex,请记住,获取互斥锁的速度至少比总线锁定慢一个数量级。

如果您仍然不确定,衡量表现。