問題タブ [volatile]

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 投票する
4 に答える
13102 参照

c++ - volatile クラス オブジェクトの定義

volatile をクラス オブジェクトに使用できますか? お気に入り:

問題は、何らかのメソッドが呼び出されたときにどこでもコンパイルされないことです。エラーは次のように述べています: error C2662: 'function' : cannot convert 'this' pointer from 'volatile MyClass' to 'MyCLass &'

ここで何が問題で、どうすれば解決できますか?

編集:

0 投票する
3 に答える
1959 参照

java - フィールド読み取りと揮発性の同期​​の違い

いくつかの同時実行のヒントを含む素敵な記事では、例が次の行に最適化されました。

私が正しく理解している場合、同期のポイントは、このスレッドによって読み取られる acct.balance の値が最新であること、および acct.balance 内のオブジェクトのフィールドへの保留中の書き込みもメイン メモリに書き込まれることを確認することです。 .

この例で少し考えさせられました: acct.balance (つまり、クラス Account のフィールド balance) を として宣言する方が効率的ではないでしょうvolatileか? これはより効率的で、synchronizeacct.balance へのすべてのアクセスを節約し、acctオブジェクト全体をロックしません。何か不足していますか?

0 投票する
5 に答える
5901 参照

c++ - アクセス関数でアクセスする共有メモリに volatile は必要か?

[編集] 背景を読むために、そして明確にするために、これは私が話していることです: volatile キーワードの紹介

組み込みシステム コードを確認する際によく見られるエラーの 1 つは、スレッド/割り込み共有データの volatile が省略されていることです。volatileしかし、私の質問は、アクセス関数またはメンバー関数を介して変数にアクセスするときに使用しないことが「安全」かどうかです。

簡単な例; 次のコードで...

... flagThreadA の読み取りが最適化されないように、変数は揮発性でなければなりませんが、関数を介してフラグが読み取られた場合は...

...flagまだ揮発性である必要がありますか? 揮発性であっても害がないことは理解していますが、私の懸念は、それが省略され、省略が発見されない場合です。これは安全でしょうか?

上記の例は自明です。実際のケース (および質問の理由) では、タスク オブジェクトの派生元である抽象クラス cTask が存在するように、RTOS をラップするクラス ライブラリがあります。このような「アクティブな」オブジェクトには通常、オブジェクトのタスク コンテキストで変更されるデータにアクセスするメンバー関数がありますが、他のコンテキストからはアクセスされます。そのようなデータが揮発性であると宣言されることは重要ですか?

私は、実際のコンパイラが何をするかよりも、そのようなデータについて何が保証されているかに本当に興味があります。私は多くのコンパイラをテストし、それらがアクセサを介した読み取りを最適化しないことを発見するかもしれませんが、ある日、この仮定が正しくないコンパイラまたはコンパイラ設定を見つけます. たとえば、関数がインライン化されている場合、そのような最適化は直接読み取りと変わらないため、コンパイラにとっては簡単であると想像できます。

0 投票する
6 に答える
3339 参照

c - POSIX mmapが揮発性ボイド*を返さないのはなぜですか?

Mmapはvoid*を返しますが、。は返しませんvolatile void*。mmapを使用して共有メモリをマップしている場合、別のプロセスがそのメモリに書き込んでいる可能性があります。つまり、同じメモリ位置からの2回の後続の読み取りで、異なる値が生成される可能性があります。では、なぜ揮発性のボイド*を返さないのでしょうか。

私の推測では、共有メモリセグメントに排他的に書き込むプロセスがある場合、存在するものを常に正しく理解しているため、揮発性ポインタを介して共有メモリを調べる必要はありません。冗長な読み取りを防ぐためにコンパイラーが行う最適化は、その足元に値を書き込んだり変更したりするものが他にないため、重要ではありません。それとも他の歴史的な理由がありますか?戻るvolatile void*のがより安全なデフォルトであり、この最適化が必要な場合は手動でvoid*にキャストできると言いたくなります。

POSIX mmapの説明:http://opengroup.org/onlinepubs/007908775/xsh/mmap.html

0 投票する
3 に答える
5697 参照

java - Java volatile 修飾子と同期ブロック

複数のスレッドによってアクセスされるが、同期ブロック内でのみアクセスされる変数には、volatile 修飾子が必要ですか? そうでない場合、なぜですか?

0 投票する
5 に答える
18312 参照

c - 関数の引数としての volatile 変数

0 投票する
2 に答える
1052 参照

c - 揮発性メンバーと不揮発性メンバーの両方を持つ結合のセマンティクスは何ですか?

より具体的には、私は以下を(簡略化して)持っています:

sizeof(int)の最初の項目にアクセスしたことがない場合、期待どおりに機能dataすることに頼ることはできbitsますか?

0 投票する
2 に答える
725 参照

c# - スレッド化されたアプリケーションでのC#Volatileキーワードの使用

いくつかの配列リストを含むクラスがあります。

私のメインクラスは、このクラスの新しいインスタンスを作成します。私のメインクラスには、配列リストを含むクラスに追加および削除するスレッドが少なくとも2つあります。現時点ではすべてが正常に実行されていますが、配列リストを含むクラスを揮発性として宣言する方が安全かどうか疑問に思っていました。

0 投票する
3 に答える
325 参照

winforms - Windowsフォームでの「揮発性」データバインディングは可能ですか?

すべてのコマンドが次のパターンに従う Winforms UI を実装しているとします。

このようなコマンドをトリガーするボタンまたはメニュー項目には、次の設定が必要です。

  • プロパティEnabledはコマンドのCanExecute
  • イベントClickはコマンドにリンクされますExecute(メソッド シグネチャが異なるため、中間イベント ハンドラーを介して)

問題CanExecuteINotifyPropertyChangedは、このプロパティを直接変更することはできず、コマンドに関連する必要のないプログラム内の他の要因に依存するため、ここでは機能しないための実装です。PropertyChangedまた、プログラムのまったく無関係な部分でコマンドのイベントをトリガーする必要はありません。

が変更されたことをデータ バインディング マネージャーにどのように通知しますCanExecuteか?

これが私の問題の(純粋に架空の)例です:

理想的には、UI が (揮発性のフィールドであるかのように) 常にチェックするようにしたいのですCanExecuteが、これは Winforms のデータ バインディングの仕組みではありません。誰でもこの問題の解決策を持っていますか?


注:ところで、私はWPFを認識しています。私の質問の背景は、WPF の一般的な方向で既存の Winforms アプリケーションを徐々に改善しようとしているということです。しかし、実際にWPFを使用して、私が尋ねた問題を取り除くことは、今のところ実現不可能です。

0 投票する
5 に答える
615 参照

c++ - 揮発性物質を取り除くのはなぜ危険なのですか?

C ++では、次volatileのように扱われます。修飾子をconst必要としない関数に揮発性データへのポインターを渡すと、コンパイルエラーがトリガーされます。volatile

なぜ危険なのですか?const修飾子を削除すると、const正確性が損なわれる可能性があることは明らかです。volatileでも「正しさ」というものはありますか?揮発性データへのポインタを不揮発性データへのポインタとして渡すと、どのように問題が発生するのか理解できません。

編集私が最初に使用した理由を皆さんが知っているようにvolatile、Mac OS XのOSAtomic関数ファミリーの多く(アトミックインクリメント、デクリメント、加算、減算、コンペアアンドスワップなど)はvolatile引数を取ります。