相关疑难解决方法(0)

我可以创建一个线程安全的std :: atomic <vector <int >>吗?

我有一个需要执行的功能n=1000.此函数执行蒙特卡罗样式模拟并返回int结果.我想nthreads=4和平奔跑.每当一个线程完成一个循环时,它应该将结果放入a std::vector<int>.因此,在1000个循环后,我有一个1000 ints 的向量,可以通过统计检查.

由于a std::vector不是线程安全的,我想std::mutex(这肯定会起作用).

但我想知道我是否可以声明一个矢量是原子的,从而绕过互斥体?有没有可能std::atomic<std::vector<int>>?我可以使用push_back等吗?

c++ multithreading vector c++11

18
推荐指数
3
解决办法
1万
查看次数

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

如何使用std :: atomic <>

在上面的问题中,显然我们可以std::mutex用来保持线程安全.我想知道何时使用哪一个.

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

public:
    A()
    {
        x=0;
    }

    void Add()
    {
        x++;
    }

    void Sub()
    {
        x--;
    }     
};
Run Code Online (Sandbox Code Playgroud)

std::mutex mtx;
classs A
{
    int x;

public:
    A()
    {
        x=0;
    }

    void Add()
    {
        std::lock_guard<std::mutex> guard(mtx);
        x++;
    }

    void Sub()
    {
        std::lock_guard<std::mutex> guard(mtx);
        x--;
    }     
};
Run Code Online (Sandbox Code Playgroud)

multithreading mutex thread-safety c++11 stdatomic

4
推荐指数
1
解决办法
1089
查看次数

标签 统计

c++11 ×2

multithreading ×2

c++ ×1

mutex ×1

stdatomic ×1

thread-safety ×1

vector ×1