向C ++中的向量中添加(预定义)原子值

问题描述 投票:1回答:1

我在C ++中使用多线程时遇到了问题。

我有一个类(称为class_a_example),该类在带有公共和受保护的访问修饰符的头文件中定义。 class_a_example取决于多个变量/结构。

在'受保护的'中,我已经定义了m_accessed成员-向量由原子组成,并且当创建类的元素时,它还取决于m_accessed,该元素需要在m_accessed中具有预定义的值。就像这样:

// class_a_example_header.h

class class_a_example {
protected:
    std::vector<std::atomic<uint32_t>> m_accessed;
    std::vector<uint32_t> m_vars;
    std::mutex m_mtx;
    // some other structures

public:
    // some methods
    inline class_a_example(/*params*/, size_t c_count, /*params*/) : m_vars(c_count, 0), m_accessed(c_count, std::atomic<uint32_t>(0))
    {
        /* some actions */
    }
};

class_a_example_header.cpp]中,在class_a_example的一种方法中,我需要与m_accessed交互(需要更改原子值):

// class_a_example_header.cpp

int32_t class_a_example::change_values(uint32_t thread_index)
{
    /* some actions */
    m_accessed[thread_index]++;
    /* some actions */
}

但是当我编译程序时,出现了以下错误提示(特别是在[[m_accessed(c_count,std :: atomic(0))

):)inline class_a_example(/*params*/, size_t c_count, /*params*/) : m_vars(c_count, 0), m_accessed(c_count, std::atomic<uint32_t>(0))
错误是:

class_a_example.cpp:114:57: required from here /opt/rh/devtoolset-8/root/usr/include/c++/8/ext/new_allocator.h:136:4: error: use of deleted function ‘std::atomic<unsigned int>::atomic(const std::atomic<unsigned int>&)’ { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }

之后,我重写了

class_a_example.h

class_a_example.cpp
// class_a_example_header.h class class_a_example { protected: std::vector<std::atomic<uint32_t>> m_accessed; // ... public: inline class_a_example(/*params*/, size_t c_count, /*params*/) : m_vars(c_count, 0), m_accessed() { // ... } // ... }; // class_a_example_header.cpp int32_t class_a_example::change_values(uint32_t thread_index) { /* some actions */ if (m_accessed.size() < m_vars.size()) m_accessed.emplace_back(std::atomic<uint32_t>(0)); m_accessed[thread_index]++; /* some actions */ }
但是错误通常是相同的,只是错误从这里开始:m_accessed.emplace_back(std::atomic<uint32_t>(0));

有什么方法(最好是简单的方法)来创建预定义的原子矢量或向其中添加值?

我在C ++中使用多线程时遇到了问题。我有一个类(称为class_a_example),该类在带有公共和受保护的访问修饰符的头文件中定义。 class_a_example ...
c++ multithreading vector atomic
1个回答
0
投票
std :: atomic尚未复制构造函数。
© www.soinside.com 2019 - 2024. All rights reserved.