この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 24045|答える: 0

[コンソールプログラム] .net/C#におけるボラタイルキーワード学習

[リンクをコピー]
掲載地 2018/05/23 11:23:40 | | | |
MS リンク:ハイパーリンクのログインが見えます。

ボラタイルキーワードは、フィールドが複数のスレッドが同時に実行されることで修正できることを示します。 揮発性と宣言されたフィールドは、単一のスレッドでアクセスされると仮定してコンパイラの最適化によって制限されません。 これにより、フィールドは常に最新の値でレンダリングされます。

揮発性修飾子は通常、複数のスレッドがアクセスするフィールドに使われますが、ロック文でアクセスをシリアライズしないフィールドに使われます。

ボラタイルキーワードは、以下の種類のフィールドに適用できます:

  • 引用タイプ。
  • ポインタタイプ(安全でない文脈での話)。 ポインタ自体は可変であるが、指し示す対象は可変ではないことに注意。 言い換えれば、「可変オブジェクトへのポインタ」は宣言できません。
  • sbyte、byte、short、ushort、int、uint、char、float、boolなどの型があります。
  • 以下のいずれかの基本型を持つエノム型:バイト、スバイト、ショート、uショート、int、またはuint。
  • 参照型として知られている汎用型パラメータ。
  • IntPtrとUIntPtr。


変数キーワードはクラスまたは構造体のフィールドにのみ適用可能です。局所変数は揮発性として宣言できません


もう無駄なことはやめて、試すループを書いてみてください:

ループで1万回テストしよう。値の出力は正しいと判明しましたが、説明がつかないVolatileはスレッドに安全ですなぜなら、何度もテストすれば計算ミスが出ることがわかるからです! 正しい結果が出る可能性もあれば、間違った結果になる可能性もあるからです



コード:



もう一度10万ループをテストすると、aの値が誤っていることがわかります。なぜならループ数が少なければ少ないほどエラーの可能性は低く、誤差はあまり明白でないからです。ちょうど先ほど1万ループの後にエラーがなかったのと同じです。

ここでロックを追加してテストすると、aの値が予想通り正しく計算されていることがわかります。



コード:



まとめ:上記の例でわかるように、volatileはスレッドの安全性を保証するものではありません。




先の:パケットグラビングツールsmsniff 2.0中国語版をダウンロードしてください
次に:VS リモートデバッグ「デバッグ操作が予想より時間がかかる」ソリューション
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com