C#虽然晚出,但是依它那优雅的代码,清晰的逻辑,强大的功能库,让编程爱好者非常喜欢(我就是一员)
而多线程技术就是其中的一项
重温C#多线程共享 同步
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
public static object 加锁对象 = new object();
static int 共享整数=1;
public static Mutex 互斥体;
public static int i = 0;
static void Main(string[] args)
{
//线程共享
//共享线程类 ASV = new 共享线程类();//实例化共享类
//Thread[] B;//定义线程数组
//B= new Thread[5];//实例化数组5个线程
//for (int c = 0; c < 6; c++)
//{
// B[c]=new Thread(new ThreadStart(ASV.共享方法));//将线程输出
// B[c].Start();//输出
//}
//Console.ReadKey();
//共享了一个值,这个值在被共享之后值会变成指定的值
//如 共享数值A=5 被第一个共享-1之后 为4 被第2个共享之后加5 为9
//lock 同步
//Thread A = new Thread(new ThreadStart(对象1));
//Thread B = new Thread(new ThreadStart(对象2));
//A.Start();
//B.Start();
//Console.ReadKey();
//给2个线程赋予 互拆锁
//Mutex 类同步演示
互斥体 = new
Mutex(true);
Thread A = new Thread(new
ThreadStart(new 互类().线程1));
Thread B = new Thread(new
ThreadStart(new 互类().线程2));
A.Start();
B.Start();
Console.ReadKey();
do {
if(Console.Read()=='e')
A.Abort();B.Abort();
} while (1 == 1);
}
public static void 对象1()
{
lock(加锁对象)//加锁 让它先访问
{
共享整数=共享整数+1;
Console.WriteLine("对象1开始,共享整数={0}",共享整数);
Thread.Sleep(200);
}
}
public static void 对象2()
{
lock(加锁对象)
{
共享整数=共享整数-1;//然后它再访问
Console.WriteLine("对象2开始,共享整数={0}",共享整数);
Thread.Sleep(200);
Console.WriteLine("对象2退出,共享整数={0}", 共享整数);
}
}
}
class 互类
{
public void 线程1()
{
do
{Program.互斥体.WaitOne();
Program.i=Program.i+1;
Console.WriteLine("线程1开始,共享数据值i={0}",Program.i);
Thread.Sleep(1000);
Console.WriteLine("线程1结束,共享数据值i={0}",Program.i);
Program.互斥体.ReleaseMutex();
Thread.Sleep(1000);
}while(1==1);
}
public void 线程2()
{
do
{
// Program.互斥体.WaitOne();
Program.i = Program.i - 1;
Console.WriteLine("线程2开始,共享数据值i={0}", Program.i);
Thread.Sleep(1000);
Console.WriteLine("线程2结束,共享数据值i={0}", Program.i);
// Program.互斥体.ReleaseMutex();
Thread.Sleep(1000);
} while (1 == 1);
}
}
class 共享线程类
{
static int B = 1;//共享一个字段
public void 共享方法()
{
Console.WriteLine("正在共享{0}", B++);
}
}
}