1

次に例を示します。

bash-4.2$ export i=0
bash-4.2$ while :; do let i=i+1; done &
[1] 29668
bash-4.2$ echo $i
0
bash-4.2$ kill %1
bash-4.2$ exit

ここで、私が始めた仕事は増え続けて$iいますが、ローカル変数としてのみです。私はbashにはポインタや参照のようなものがないことを知っているので、私の質問はそれをどのように行うかです。

どういうわけか可能であれば、同時に複数のスレッドで1つの変数にアクセスして書き込むことができることを意味します。これは、私が達成したいことです。クリティカルセクション(シェル/ bash内)のようなものでメモリの読み取り/書き込みの問題を防ぐ方法はありますか?

4

3 に答える 3

2

Bash 4は、単に双方向パイプを使用する舞台裏の方法であるコプロセスをサポートしています。

于 2012-06-13T15:51:05.947 に答える
1

Bash にはスレッドがなく、プロセスはメモリを共有しません。サブシェルは依然として異なるプロセスです。サブシェルは親から状態を継承しますが、共有データはありません。

親は、サブシェルまたは他のプロセスから出力を読み取り、それから自身の状態を変更できますが、子が直接そうする方法はありません。

于 2012-06-13T15:28:20.960 に答える
0

まず、これらはスレッドではなく、プロセスです。子が親プロセスの変数を変更する簡単な方法はありません (私が知っている唯一の方法は、C プログラムをデバッガーとしてアタッチすることです)。

呼び出し元にデータを戻すには、パイプ (おそらく名前付きパイプ) を使用することをお勧めします。

于 2012-06-13T15:31:43.327 に答える