問題タブ [sig-atomic-t]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1085 参照

c++ - volatile sig_atomic_tを使用して、C ++ 03のミューテックスを回避できますか?

アトミック読み取りとインクリメント/デクリメントをサポートするハードウェアを使用している場合volatile sig_atomic_t、C ++ 03でを使用してアトミック操作にアクセスし、本格的なミューテックスを回避できますか、それともC ++ 11とを待つ必要がありstd::atomic<int>ますか?

0 投票する
1 に答える
1338 参照

c - C ヘッダー ファイルで volatile sig_atomic_t をグローバルにする

msh.c ファイルで次のように初期化されたグローバル変数を作成しようとしています。

これだけでもよさそうです。ただし、proto.h ファイル (このプロジェクトのすべての c ファイルに含まれています) に移動し、次のように入力すると:

一連のエラーがスローされます。

この変数をグローバルにするにはどうすればよいですか? ありがとう。

0 投票する
1 に答える
106 参照

c - シグナル処理中に volatile キーワードが使用されていない場合のコンパイラの最適化効果を実証しますか?

次のコードでは、変数quithas を作成していませんvolatile sig_atomic_t。無地のままにしてありintます。

quit変数が として指定されていないためvolatile、コンパイラのオプティマイザーがwhileコード内の -loop を次のように最適化することを期待していました。

しかし、私はこれが起こっているのを見ません。1 つの端末で、次のコマンドを実行します。

別の端末で、SIGUSR1 を自分のプログラムに送信します。

最初のターミナルの出力は、プログラムのシグナル ハンドラーが呼び出され、while-loop が終了したことを示しています。

quitではないため、ループの最適化をどのように実証できvolatileますか?

0 投票する
1 に答える
1180 参照

c - シグナル処理のコンテキストで正確にどの変数を sig_atomic_t にする必要がありますか?

を使用した簡単なおもちゃのプログラムを次に示しますvolatile sig_atomic_t

この特定のプログラムの変数にvolatile sig_atomic_t必要な理由はわかっていると思います。quit

  1. がないvolatileと、コンパイラはwhile (!quit) ;無限ループに最適化する可能性があります。ループの変更が見つからないため、常に残っquitていると見なされます。quit0
  2. への更新quitまたは読み取りはquit、単一のマシン命令で発生する必要があります。の更新または読み取りに複数のマシン命令が必要quitな場合、更新の進行中にシグナル ハンドラーが呼び出されると、シグナル ハンドラーの読み取りで の値が矛盾する可能性がありますquit

私はこれまでのところ正しいですか?そうでない場合は、答えを修正してください。

sig_atomic_tここで、シグナル処理のコンテキストで必要な場合の一般化されたルールを学びたいと思います。Jonathan Leffler はコメントで、一般化するのは簡単ではないと説明しました。

sig_atomic_tC標準の観点から、変数を定義する必要がある既知のシナリオのリストを提供できますか? 網羅的なリストである必要はありません。これは、経験の浅い開発者がシグナル処理コードを含む C ソフトウェアを作成する際に参照できるリストになる可能性があります。