問題タブ [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.
c++ - volatile クラス オブジェクトの定義
volatile をクラス オブジェクトに使用できますか? お気に入り:
問題は、何らかのメソッドが呼び出されたときにどこでもコンパイルされないことです。エラーは次のように述べています: error C2662: 'function' : cannot convert 'this' pointer from 'volatile MyClass' to 'MyCLass &'
ここで何が問題で、どうすれば解決できますか?
編集:
java - フィールド読み取りと揮発性の同期の違い
いくつかの同時実行のヒントを含む素敵な記事では、例が次の行に最適化されました。
私が正しく理解している場合、同期のポイントは、このスレッドによって読み取られる acct.balance の値が最新であること、および acct.balance 内のオブジェクトのフィールドへの保留中の書き込みもメイン メモリに書き込まれることを確認することです。 .
この例で少し考えさせられました: acct.balance (つまり、クラス Account のフィールド balance) を として宣言する方が効率的ではないでしょうvolatile
か? これはより効率的で、synchronize
acct.balance へのすべてのアクセスを節約し、acct
オブジェクト全体をロックしません。何か不足していますか?
c++ - アクセス関数でアクセスする共有メモリに volatile は必要か?
[編集] 背景を読むために、そして明確にするために、これは私が話していることです: volatile キーワードの紹介
組み込みシステム コードを確認する際によく見られるエラーの 1 つは、スレッド/割り込み共有データの volatile が省略されていることです。volatile
しかし、私の質問は、アクセス関数またはメンバー関数を介して変数にアクセスするときに使用しないことが「安全」かどうかです。
簡単な例; 次のコードで...
... flag
ThreadA の読み取りが最適化されないように、変数は揮発性でなければなりませんが、関数を介してフラグが読み取られた場合は...
...flag
まだ揮発性である必要がありますか? 揮発性であっても害がないことは理解していますが、私の懸念は、それが省略され、省略が発見されない場合です。これは安全でしょうか?
上記の例は自明です。実際のケース (および質問の理由) では、タスク オブジェクトの派生元である抽象クラス cTask が存在するように、RTOS をラップするクラス ライブラリがあります。このような「アクティブな」オブジェクトには通常、オブジェクトのタスク コンテキストで変更されるデータにアクセスするメンバー関数がありますが、他のコンテキストからはアクセスされます。そのようなデータが揮発性であると宣言されることは重要ですか?
私は、実際のコンパイラが何をするかよりも、そのようなデータについて何が保証されているかに本当に興味があります。私は多くのコンパイラをテストし、それらがアクセサを介した読み取りを最適化しないことを発見するかもしれませんが、ある日、この仮定が正しくないコンパイラまたはコンパイラ設定を見つけます. たとえば、関数がインライン化されている場合、そのような最適化は直接読み取りと変わらないため、コンパイラにとっては簡単であると想像できます。
c - POSIX mmapが揮発性ボイド*を返さないのはなぜですか?
Mmapはvoid*を返しますが、。は返しませんvolatile void*
。mmapを使用して共有メモリをマップしている場合、別のプロセスがそのメモリに書き込んでいる可能性があります。つまり、同じメモリ位置からの2回の後続の読み取りで、異なる値が生成される可能性があります。では、なぜ揮発性のボイド*を返さないのでしょうか。
私の推測では、共有メモリセグメントに排他的に書き込むプロセスがある場合、存在するものを常に正しく理解しているため、揮発性ポインタを介して共有メモリを調べる必要はありません。冗長な読み取りを防ぐためにコンパイラーが行う最適化は、その足元に値を書き込んだり変更したりするものが他にないため、重要ではありません。それとも他の歴史的な理由がありますか?戻るvolatile void*
のがより安全なデフォルトであり、この最適化が必要な場合は手動でvoid*にキャストできると言いたくなります。
POSIX mmapの説明:http://opengroup.org/onlinepubs/007908775/xsh/mmap.html
java - Java volatile 修飾子と同期ブロック
複数のスレッドによってアクセスされるが、同期ブロック内でのみアクセスされる変数には、volatile 修飾子が必要ですか? そうでない場合、なぜですか?
c - 揮発性メンバーと不揮発性メンバーの両方を持つ結合のセマンティクスは何ですか?
より具体的には、私は以下を(簡略化して)持っています:
sizeof(int)
の最初の項目にアクセスしたことがない場合、期待どおりに機能data
することに頼ることはできbits
ますか?
c# - スレッド化されたアプリケーションでのC#Volatileキーワードの使用
いくつかの配列リストを含むクラスがあります。
私のメインクラスは、このクラスの新しいインスタンスを作成します。私のメインクラスには、配列リストを含むクラスに追加および削除するスレッドが少なくとも2つあります。現時点ではすべてが正常に実行されていますが、配列リストを含むクラスを揮発性として宣言する方が安全かどうか疑問に思っていました。
winforms - Windowsフォームでの「揮発性」データバインディングは可能ですか?
すべてのコマンドが次のパターンに従う Winforms UI を実装しているとします。
このようなコマンドをトリガーするボタンまたはメニュー項目には、次の設定が必要です。
- プロパティ
Enabled
はコマンドのCanExecute
- イベント
Click
はコマンドにリンクされますExecute
(メソッド シグネチャが異なるため、中間イベント ハンドラーを介して)
問題CanExecute
INotifyPropertyChanged
は、このプロパティを直接変更することはできず、コマンドに関連する必要のないプログラム内の他の要因に依存するため、ここでは機能しないための実装です。PropertyChanged
また、プログラムのまったく無関係な部分でコマンドのイベントをトリガーする必要はありません。
が変更されたことをデータ バインディング マネージャーにどのように通知しますCanExecute
か?
これが私の問題の(純粋に架空の)例です:
理想的には、UI が (揮発性のフィールドであるかのように) 常にチェックするようにしたいのですCanExecute
が、これは Winforms のデータ バインディングの仕組みではありません。誰でもこの問題の解決策を持っていますか?
注:ところで、私はWPFを認識しています。私の質問の背景は、WPF の一般的な方向で既存の Winforms アプリケーションを徐々に改善しようとしているということです。しかし、実際にWPFを使用して、私が尋ねた問題を取り除くことは、今のところ実現不可能です。
c++ - 揮発性物質を取り除くのはなぜ危険なのですか?
C ++では、次volatile
のように扱われます。修飾子をconst
必要としない関数に揮発性データへのポインターを渡すと、コンパイルエラーがトリガーされます。volatile
なぜ危険なのですか?const
修飾子を削除すると、const
正確性が損なわれる可能性があることは明らかです。volatile
でも「正しさ」というものはありますか?揮発性データへのポインタを不揮発性データへのポインタとして渡すと、どのように問題が発生するのか理解できません。
編集私が最初に使用した理由を皆さんが知っているようにvolatile
、Mac OS XのOSAtomic
関数ファミリーの多く(アトミックインクリメント、デクリメント、加算、減算、コンペアアンドスワップなど)はvolatile
引数を取ります。