teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2021/03/06 00:58

投稿

退会済みユーザー
answer CHANGED
@@ -3,6 +3,8 @@
3
3
  思うのですが、しない場合もあるのでしょうか。
4
4
 
5
5
  単純な値で他のオブジェクトとの関連が無く、複数のスレッドから読み込まれるが、書き込むのが単一のスレッドと判っているようなケースなら、しない事もあるかもしれません。(値のモニタリング画面的なものとか)
6
+ (追記)
7
+ 32bitアプリで64bit値を読み書きするようなケースだと、操作はアトミックにならないので排他が必要です。判断がつかない場合は、Interlockedクラスを使用して値の読み書きをしたほうがよいでしょう。
6
8
 
7
9
  > 質問2
8
10
  共有オブジェクト内に複数プロパティがありそれを排他制御する場合それぞれ

1

修正

2021/03/06 00:58

投稿

退会済みユーザー
answer CHANGED
@@ -10,6 +10,6 @@
10
10
  この記述だと排他制御はされるかもしれないですが、
11
11
  ほかに良い記述のしかたはあるのでしょうか。
12
12
 
13
- 排他制御によって何を実現したいかという要件で変わってくるので一概に言えないです。単純なインクリメント・デクリメント・論理演算ならInterlockedクラスを使えばよいですし、スレッドセーフなコレクションが必要なら、System.Collections.Concurrent 名前空間にいくつか用意されています。プロセス間での排他も必要ならセマフォを使う必要があるでしょう。ベストな排他制御の方法を選ぶためには、要件を明確にする必要があります。
13
+ 排他制御によって何を実現したいかという要件で変わってくるので一概に言えないです。単純な算ならInterlockedクラスを使えばよいですし、スレッドセーフなコレクションが必要なら、System.Collections.Concurrent 名前空間にいくつか用意されています。プロセス間での排他も必要ならセマフォを使う必要があるでしょう。ベストな排他制御の方法を選ぶためには、要件を明確にする必要があります。
14
14
 
15
15
  [マルチスレッドで高速なC#を書くためのロック戦略](https://qiita.com/tadokoro/items/28b3623a5ec58517d431)