私は、OpenMPを使用していますが、次のようにのように私のプログラムに見えます:fprintfコマンドの1行はスレッドセーフですか?
\#pragma omp parallel for
for(x = 0, y = 0, x < 5, x++, y++)
function(x, y, fp);
void function(int x , int y, FILE* fp);
{
fprintf(fp, "(%d, %d)\n", x y);
}
は私が
(0, 0)
(2, 2)
(1, 1)
(3, 3)
(4, 4)
順序は重要ではありません
としてファイルの内容が、座標x、yがなければならないことを望みますすなわち、プログラムは(2,3)のようなものを生成すべきではありません。この動作は常に保証されていますか?私はLinux上でgccコンパイラを使用しています。
私は確信しているとは思っていますが、確かめたいのであれば、(write)システムコールを直接呼び出すことができます。 –
@KerrekSB、ありがとう、私はこのプログラムを複数回(ループカウンタを増やして)実行しましたが、毎回正しい出力を生成するようです。 – quartz
可能な複製http://stackoverflow.com/questions/467938/stdout-thread-safe-in-c-on-linux – Tudor