-1
我正在使用Eclipse Neon并尝试创建一个并发计数器的基本示例,该计数器递增和递减20,但构建不会编译。我的代码两行被突出显示并且两者都示出了以下错误:C++错误:'operator ='是'std :: __ 1 :: thread'的私有成员
“运算符=”是“的std :: __ 1 ::螺纹”
所讨论的行是的私有成员:
upThreads[i] = std::thread(increment20);
downThreads[i] = std::thread(decrement20);
的完整代码:
#include <thread>
#include <iostream>
#include <mutex>
using namespace std;
std::mutex mymutex;
int counter;
void increment20() {
std::lock_guard<std::mutex> guard(mymutex);
for (int i = 0; i < 20; i++) {
++counter;
}
}
void decrement20() {
std::lock_guard<std::mutex> guard(mymutex);
for (int i = 0; i < 20; i++) {
--counter;
}
}
int main() {
std::thread upThreads[10];
std::thread downThreads[10];
for (int i = 0; i < 10; ++i) {
upThreads[i] = std::thread(increment20);
downThreads[i] = std::thread(decrement20);
}
for (int i = 0; i < 10; ++i) {
upThreads[i].join();
downThreads[i].join();
}
std::cout << "final value: " << counter << std::endl;
return 0;
}
任何帮助将不胜感激!
这些行应该没有问题,因为它们应该使用移动赋值运算符而不是复制赋值运算符。你使用什么编译器和版本? –
@NeilButterworth:他们是可移动的。 –
如上所述,您的问题[不可重现](http://coliru.stacked-crooked.com/a/eda4427c05800cc6)。你正在使用哪个编译器选项? – Rakete1111