C#でスレッドを使った演習


  1. スレッドの作成と開始: スレッドを作成するには、Threadクラスを使用します。以下は、スレッドを作成して開始する基本的な例です。
using System;
using System.Threading;
class Program
{
    static void Main()
    {
        // スレッドを作成して開始
        Thread thread = new Thread(DoWork);
        thread.Start();

        // メインスレッドの処理
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine("メインスレッド: " + i);
            Thread.Sleep(1000);
        }
    }
    static void DoWork()
    {
        // スレッドの処理
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine("スレッド: " + i);
            Thread.Sleep(1000);
        }
    }
}
  1. スレッドの同期: 複数のスレッドが同時に実行される場合、データの競合や同期の問題が発生する可能性があります。これを防ぐために、スレッドの同期を行う必要があります。以下は、Monitorクラスを使用してスレッドの同期を行う例です。
using System;
using System.Threading;
class Program
{
    static int counter = 0;
    static object lockObject = new object();
    static void Main()
    {
        // スレッドを作成して開始
        Thread thread1 = new Thread(IncrementCounter);
        Thread thread2 = new Thread(IncrementCounter);
        thread1.Start();
        thread2.Start();

        // メインスレッドの処理
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine("メインスレッド: " + counter);
            Thread.Sleep(1000);
        }
    }
    static void IncrementCounter()
    {
        for (int i = 0; i < 5; i++)
        {
            lock (lockObject)
            {
                counter++;
            }
            Console.WriteLine("スレッド: " + counter);
            Thread.Sleep(1000);
        }
    }
}
  1. スレッドの終了待機: スレッドの処理が完了するのを待機する必要がある場合、ThreadクラスのJoinメソッドを使用します。以下は、スレッドの終了を待機する例です。
using System;
using System.Threading;
class Program
{
    static void Main()
    {
        // スレッドを作成して開始
        Thread thread = new Thread(DoWork);
        thread.Start();

        // スレッドの終了を待機
        thread.Join();
        Console.WriteLine("スレッドが終了しました。");
    }
    static void DoWork()
    {
        // スレッドの処理
        Thread.Sleep(5000);
        Console.WriteLine("スレッドの処理が完了しました。");
    }
}

これらのコード例を参考にして、C#でスレッドを使用する方法を学び、自分自身でさまざまなスレッドの演習を行ってみてください。