私は OSX で作業しており、シェルに bash を使用しています。実行可能ファイルを何百回も呼び出すスクリプトがあり、各呼び出しは互いに独立しています。したがって、このコードを並行して実行します。ただし、実行可能ファイルを呼び出すたびに、コミュニティ テキスト ファイルの新しい行に出力が追加されます。
テキスト ファイルの順序は重要ではありません (ただし、UNIX の sort コマンドを使用するだけなので、複雑にする価値はまったくありません)。私の懸念は、スクリプトを並行して実行すると、異常な偶然によって 2 つのスレッドがテキスト ファイルをチェックアウトし、それに出力してから、別のコピーをテキスト ファイルの元のディレクトリに保存することです。したがって、ファイルへの書き込みの 1 つを無効にします。
これは実際に起こりますか、それともファイルへの印刷に関する私の理解に問題がありますか? これもケースバイケースであるかどうかは完全にはわからないので、以下のプログラムで行われていることのモックコードを提供します。
脚本:
#!/bin/sh
abs=$1
input=$(echo "$abs" | awk '{print 0.004 + 0.005*$1 }')
./program input
"。/プログラム":
~~Normal .c file stuff here~~
~~VALUE magically calculated here~~
~~run number is pulled out of input and assigned to index for sorting~~
FILE *fpp;
fpp = fopen("Doc.txt","a");
fprintf(fpp,"%d, %.3f\n", index, VALUE);
fclose(fpp);
~Closing events of program.c~~
bash でスクリプトを並行して実行するコマンド:
printf "%s\n" {0..199} | xargs -P 8 -n 1 ./program
皆さんが提供できる助けをありがとう。