■ 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