coutとcerrを介してコンソールに書き込むOpenMPスレッドがあります。もちろん、これは安全ではありません。出力をインターリーブできるからです。私は次のようなことをすることができます
#pragma omp critical(cerr)
{
cerr << "my variable: " << variable << endl;
}
valgrind DRDマニュアル( http://valgrind.org/docs/manual/drd-manual.html#drd-manual.effective-)で説明されているアプローチと同様に、cerrをスレッドセーフバージョンに置き換えることができればもっと良いでしょう。std ::ostreambufからクラスを派生させることを含む)を使用します。理想的には、最終的には、cerrを自分のスレッド化されたcerrに置き換えるだけです。
tcerr << "my variable: " << variable << endl;
このようなクラスは、「endl」に遭遇するとすぐにコンソールに出力できます。異なるスレッドからの行がインターリーブされていてもかまいませんが、各行は1つのスレッドからのみ取得する必要があります。
C ++でのこのストリーミングがどのように機能するのか、私にはよくわかりません。複雑すぎます。誰かそのようなクラスがありますか、またはその目的のためにそのようなクラスを作成する方法を教えてもらえますか?