我在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.cpp:class_a_example.h
// 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 ...