大きなプログラムの基本コードを記述しようとしています。 元のコードは、私の計算のいくつかの結果をtxtファイルに書き込むと仮定しますが、ここでは、数値1を書くように変更しました(コードを単純化するため)。 問題は、私が得ると思うものの数を得ることができないということです.1000枚の印刷物1000枚を印刷します。それぞれの印刷枚数は1枚ずつ大きくなります。スレッドを使用すると重複が印刷されるC++
私のコードに問題があります?
(私は窓10、コードブロックのワークスペースを使用しています、私はC++のコードを書いている)
コード:
#include <iostream>
#include <thread>
#include <vector>
#include <fstream>
using namespace std;
ofstream myfile;
void doTask()
{
myfile << "1\n";
}
void f()
{
vector<thread> threads;
for(int i = 0; i < 10; ++i)
{
threads.push_back(thread(doTask));
}
for(int j=0; j<10; j++) threads[j].join();
threads.erase(threads.begin(), threads.end());
}
int main()
{
myfile.open("a.txt");
for(int i=0; i<100; i++) f();
myfile.close();
return 0;
}
はあなたのすべてをありがとう!
正常です。どうしたの? 1つの値を1000回pritingします。 – Sumeet
'ofstream'はスレッドセーフではありませんので、mutexを追加して一度に1つのスレッドしか書き込まないようにする必要があります。 – user657267
'threads'を消去する必要はありません。デストラクタがそれを処理します。また、明示的に 'myfile'を閉じる必要もありません(デストラクタがそれを処理します)。 – molbdnilo