using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
static private int i = 0;
static private Object m_lockObject = new Object();
static void Main(string[] args)
{
Thread[] thread = new Thread[10];
thread[0] = new Thread(f1);
thread[1] = new Thread(f2);
thread[2] = new Thread(f3);
thread[3] = new Thread(f4);
thread[4] = new Thread(f5);
thread[5] = new Thread(f6);
thread[6] = new Thread(f7);
thread[7] = new Thread(f8);
thread[8] = new Thread(f9);
thread[9] = new Thread(f10);
for (int i = 0; i < 10; i++)
{
thread[i].Start();
}
}
static void f1()
{
for (int j = 0; j < 10; j++)
{
lock (m_lockObject)
{
i++;
System.Console.WriteLine("执行线程1,加1 " + i.ToString());
Thread.Sleep(200);
}
}
}
static void f2()
{
for (int j = 0; j < 10; j++)
{
lock (m_lockObject)
{
i += 2;
System.Console.WriteLine("执行线程2,加2 " + i.ToString());
Thread.Sleep(200);
}
}
}
static void f3()
{
for (int j = 0; j < 10; j++)
{
lock (m_lockObject)
{
i += 3;
System.Console.WriteLine("执行线程3,加3 " + i.ToString());
Thread.Sleep(200);
}
}
}
static void f4()
{
for (int j = 0; j < 10; j++)
{
lock (m_lockObject)
{
i += 4;
System.Console.WriteLine("执行线程4,加4 " + i.ToString());
Thread.Sleep(200);
}
}
}
static void f5()
{
for (int j = 0; j < 10; j++)
{
lock (m_lockObject)
{
i += 5;
System.Console.WriteLine("执行线程5,加5 " + i.ToString());
Thread.Sleep(200);
}
}
}
static void f6()
{
for (int j = 0; j < 10; j++)
{
lock (m_lockObject)
{
i += 6;
System.Console.WriteLine("执行线程6,加6 " + i.ToString());
Thread.Sleep(200);
}
}
}
static void f7()
{
for (int j = 0; j < 10; j++)
{
lock (m_lockObject)
{
i += 7;
System.Console.WriteLine("执行线程7,加7 " + i.ToString());
Thread.Sleep(200);
}
}
}
static void f8()
{
for (int j = 0; j < 10; j++)
{
lock (m_lockObject)
{
i += 8;
System.Console.WriteLine("执行线程8,加8 " + i.ToString());
Thread.Sleep(200);
}
}
}
static void f9()
{
for (int j = 0; j < 10; j++)
{
lock (m_lockObject)
{
i += 9;
System.Console.WriteLine("执行线程9,加9 " + i.ToString());
Thread.Sleep(200);
}
}
}
static void f10()
{
lock (m_lockObject)
{
for (int j = 0; j < 10; j++)
{
i += 10;
System.Console.WriteLine("执行线程10,加10 " + i.ToString());
Thread.Sleep(200);
}
}
}
}
}
十个线程互斥访问临界区域i
C#多线程简单实例
最新推荐文章于 2024-06-26 11:14:11 发布