マルチスレッド

とりあえず実験です。

C# のマルチスレッドは何種類か実現方法があるのですが、一番簡単なスレッドプールを使ってみます。

private static object lockObject = new Object();

private static void threadMethod(object o)
{
    // 非同期で実行される部分

    lock(lockObject)
    {
        // lock による排他処理
    }
}

private void button1_Click(object sender, EventArgs e)
{
    WaitCallback wcb = new WaitCallback(threadMethod);
    ThreadPool.QueueUserWorkItem(wcb);
}

細かい動作の原理は良く分かりませんが、とりあえずこんな感じです。

んで、lock によって lockObject のロックを取得するのですが、これは lockObject へのアクセスを出来なくなるのでは無く、他のスレッドでロックが取得出来ないようにする為の仕組みです。結局人間が処理を把握しておかないと駄目なんですね。当たり前ですが、重要なポイントです。Delphi の Synchronized はメインスレッドで動作させる為の仕組みなので、この辺りの考え方が異なります。どっちが良いという話では全く無いですが。

でも、結構手軽に扱えますね〜。同期を取るのはそれなりに面倒ですが、別にクラスを作る必要が無いってのはポイント高いですね。