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システムでは並列処理を多用していますが、 作りが悪いとすぐに意図しない動きをします。

ロックステートメントさまさまです。

しかし、ロックのコストが高いのと、 せっかくの並列化の利点を無くしてしまうので、 できることなら使いたくはないですね。