LiplisDevDiary/2014-09-11
Last-modified:
PluginRenderer::executePluginBlock(): Plugin #stlinebreak() is not implemented.
Lockステートメントで処理をロックする
Lockステートメントは複数のスレッドから参照される、オブジェクトをロックして、 あるスレッドがアクセスしている最中は、他のスレッドはアクセスできないように するものです。
オブジェクトに対してロックをかけるものだと思っていましたが、 特定の処理をロックすることができるようですね。
lock ステートメント (C# リファレンス) http://msdn.microsoft.com/ja-jp/library/c5kehkcz.aspx
C#のリファレンスです。 その中に以下のような処理が有ります。
lock (thisLock) { if (balance >= amount) { Console.WriteLine("Balance before Withdrawal : " + balance); Console.WriteLine("Amount to Withdraw : -" + amount); balance = balance - amount; Console.WriteLine("Balance after Withdrawal : " + balance); return amount; } else { return 0; // transaction rejected } }
説明に、「ステートメントブロックがロックされる」とあります。
適当なプライベートなオブジェクト「thisLock」をロックして、 その間の処理をブロックしています。
Clalisシステムでは並列処理を多用していますが、 作りが悪いとすぐに意図しない動きをします。
ロックステートメントさまさまです。
しかし、ロックのコストが高いのと、 せっかくの並列化の利点を無くしてしまうので、 できることなら使いたくはないですね。