C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

lockステートメント

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■98814 / inTopicNo.1)  lockステートメント
  
□投稿者/ まーい (1回)-(2021/12/24(Fri) 10:28:21)

分類:[C#] 

最近、下のようなコードを見ました。

lockは使用したことが無かったのですが、
下記のような使い方はよくするのでしょうか?
「o」オブジェクトを作って、それをロックする
というやり方に何か違和感を感じました。


protected readonly object o = new object();

lock(o)
{
using (StreamWriter sw = new StreamWriter(パス))
{
ファイル処理
}
}
引用返信 編集キー/
■98815 / inTopicNo.2)  Re[1]: lockステートメント
□投稿者/ 魔界の仮面弁士 (3268回)-(2021/12/24(Fri) 10:41:06)
2021/12/24(Fri) 10:49:28 編集(投稿者)

No98814 (まーい さん) に返信
> lockは使用したことが無かったのですが、
> 下記のような使い方はよくするのでしょうか?
合ってますよ。
volatile キーワードが併用されたりもしますが、
private にするか protected にするかは実装次第。

なお lock ステートメントは、コンパイルされると Monitor クラスの呼び出しへと変換されます。
https://ufcpp.net/study/csharp/sp_thread.html#lock

> 「o」オブジェクトを作って、それをロックする
> というやり方に何か違和感を感じました。
『今使ってます』を表すフラグなので、適当なスコープの
参照型オブジェクトを用意すれば何でも良いのですが、
大抵は素の new object() が使われます。

配列の場合は、SyncRoot プロパティを lock することもありますね。
(ICollection.SyncRoot)
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ