■ C# でのロック
* データの不整合を防ぐ排他制御(exclusive operation)のためのロックの仕方は、C#では以下の通り。 【1】 lock ステートメント ... .NET4.0以降 【2】 Monitor.Enter() / Monitor.Exit() ... .NET4.0より前https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/lock-statement
【1】 lock ステートメント
* シングルトーン(以下の関連記事を参照)のクラスを作成する時など排他制御が必要な場合に使用する
構文
lock(ロックするオブジェクト)
{
// クリティカルセクション
}
サンプル
public class SingletonSampleClass
{
private static SingletonSampleClass sampleObject;
private static object lockObject = new object();
public static SingletonSampleClass SampleInstance
{
get
{
lock (lockObject)
{
if (sampleObject == null)
{
sampleObject = new SingletonSampleClass();
}
return sampleObject;
}
}
}
}
【2】 Monitor.Enter() / Monitor.Exit()
サンプル
object lockObject = new object();
bool isLocking = false;
try
{
System.Threading.Monitor.Enter(lockObject, ref isLocking);
// Your code...
}
finally
{
if (isLocking)
{
System.Threading.Monitor.Exit(lockObject);
}
}
参考文献
http://msdn.microsoft.com/ja-jp/library/c5kehkcz%28v=vs.80%29.aspxhttp://kzpro.iga-log.com/Entry/74/
http://nazochu.blogspot.jp/2011/09/lock-c.html
http://ufcpp.net/study/csharp/sp_thread.html
関連記事
シングルトーン(Singleton)パターン
C#https://blogs.yahoo.co.jp/dk521123/22749339.html
VB
https://blogs.yahoo.co.jp/dk521123/27516485.html