-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