std::vector<std::thread> thread_pool;
...
std::generate_n(std::back_inserter(thread_pool), cpu_cores,
[] (){
//...
return std::thread{worker(worker_name) };
} );
其中:
class worker {
std::atomic_bool done;
protected:
void operator()() {
while(!done) {
// some work
}
}
public:
worker(const std::string& worker_name)
: done(false) {
// some initialization
}
// other fields
};
error: use of deleted function 'std::atomic_bool::atomic_bool(const std::atomic_bool&)'
GCC 4.9
因为我看到原子无法复制,只是被移动了。 上面的代码需要复制some_object类的ctor。 怎么解决这个?
(可能设计本身更糟糕, some_object是一个线程的仿函数,而atomic是一个关闭进程的标志)
答案 0 :(得分:5)
你的班级:
class worker {
std::atomic_bool done;
};
不可复制或可移动,因为std::atomic
显式delete
是其复制构造函数(隐式delete
是其移动构造函数)。如果你想允许它被移动或复制,你必须自己写,例如:
worker(worker&& rhs)
: done(rhs.done.load())
{ }