我有一个简单的代码,可以找到我自己的BigInt
类型的任何分隔符,这些分隔符具有自己的随机访问迭代器:
BigIntRangeIterator range(2, x);
auto i = std::find_if(std::execution::par, range.begin(), range.end()
, [&](auto y) {return x % y == 0;}
);
我的迭代器包含
std::vector
,因此它不是普通可复制的。当我尝试编译此代码时,我从std::atomic
实现中得到错误:/usr/include/c++/9/atomic:191: error: static assertion failed: std::atomic requires a trivially copyable type
191 | static_assert(__is_trivially_copyable(_Tp),
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
这是否意味着在
std::find_if
函数的并行版本中只能使用平凡可复制的迭代器?
最佳答案
是的,它需要使用std::atomic
来避免数据争用,而std::atomic
的主要模板要求该类可以被普通复制构造。
https://en.cppreference.com/w/cpp/atomic/atomic#Primary_template
关于c++ - 我可以在std::find_if的并行版本中使用非平凡的可迭代迭代器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61303116/