単純マルチスレッドとロック
マルチスレッドとロック:
単純スレッドプール:
namespace Threads
{
class Program
{
static void Main(string[] args)
{
Thread[] ths = new Thread[5];
for (int i = 0; i < ths.Length; i++)
{
ths[i] = new Thread(new ThreadStart(Print));
ths[i].Name = "Thread" + i;
}
foreach (Thread th in ths)
{
th.Start();
Thread.Sleep(5);
}
Console.ReadLine();
}
private static object locked = new object();
public static void Print()
{
lock (locked)
{
// 。
Console.WriteLine(Thread.CurrentThread.Name);
Console.Write(" :");
for (int i = 0; i < 5; i++)
{
Thread.Sleep(100 * new Random().Next(5));
Console.Write(i+",");
}
Console.WriteLine();
}
}
}
}
単純スレッドプール:
namespace ThreadPool2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Main Thread:" + Thread.CurrentThread.ManagedThreadId);
Print p = new Print();
WaitCallback back = new WaitCallback(PrintTheNumbers);
for (int i = 0; i < 5; i++)
{
ThreadPool.QueueUserWorkItem(back, p);
}
Console.WriteLine("All tasks queued");
Console.ReadLine();
}
public static void PrintTheNumbers(object state)
{
Print p = (Print)state;
p.PrintNumber();
}
class Print
{
private object locked = new object();
public void PrintNumber()
{
lock (locked)
{
Console.WriteLine("ThreadName:" + Thread.CurrentThread.ManagedThreadId);
Console.Write(" :");
for (int i = 0; i < 5; i++)
{
Console.Write(i + ",");
Thread.Sleep(500);
}
Console.WriteLine();
}
}
}
}
}