Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
Threading.Interlocked.Exchangeについて。
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30248#CommentId82830
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
YuO
 (社会人)
投稿日時
2017/6/12 02:38:20
> 一応これで解決なのですが…、ただ、気になるのが、、、
> >Long型は64bitプロセスならばやはり不要です。
> これはbit幅が関係するよということ、もしくはその強調ですか?
> 単に変数に値をセットするだけの場合でも、型やプラットフォームによってそうとは限らない、という意味なのでしょうか?
・32bitプロセス:32bit単位でメモリにアクセスする
・64bitプロセス:64bit単位でメモリにアクセスする
という違いがあります。
そして,Long型のフィールドに対しての読み書きは
・32bitプロセス:2回のアクセスが必要
・64bitプロセス:1回のアクセスが必要
となります。
32bitプロセスでLong型のフィールドにアクセスする場合,
他のスレッドが書き込もうとしているとアクセスに競合が発生する可能性があります。
・自スレッドの書き込みと他スレッドの書き込みが競合し,どちらが書き込んだでも無い値が書き込まれる可能性
・自スレッドの読み込みと他スレッドの書き込みが競合し,書き込み前でも書き込み後でも無い,本来ありえない値が読まれる可能性
> 例えば、上記の条件に合わない [型T] である [変数V] があるとして、そこに複数のスレッドからそれぞれ [値A]、[値B] を代入し続けた場合、[変数V] は [値A] でも [値B] でもない、壊れたような値である場合があるということですか?
あり得ます。Long型のフィールドに値を代入する場合に,32bitプロセスでは,
1. スレッド1が上位32bitを書き込む
2. スレッド2が上位32bitを書き込む
3. スレッド2が下位32bitを書き込む
4. スレッド1が下位32bitを書き込む
という順序の書き込みが起こる可能性があります。
ここで,スレッド2が書き込んだ上位32bitとスレッド1が書き込んだ下位32bitからなるLong値ができああがります。
> さらにさらに無関係な質問なのですが、YuO様の返答のサンプルコードが枠線で囲まれ文字が色付けされていると思いますが、どうするとそう書けるのでしょうか…?
投稿時に表示される,「投稿で使用できる特殊コードの説明」をお詠み下さい。