发布:2019/10/15 22:48:10作者:管理员 来源:本站 浏览次数:1011
class Program
{
static Thread SeekBookThread = new Thread(new ThreadStart(TestMutiThrd.SeekProc));
static Thread payMoneyThread = new Thread(new ThreadStart(TestMutiThrd.PayMoneyProc));
static Thread getBookThread = new Thread(new ThreadStart(TestMutiThrd.GetBookProc));
static void Main(string[] args)
{
SeekBookThread.Name = "扫描线程";
SeekBookThread.Start();
payMoneyThread.Name = "付钱线程";
payMoneyThread.Start();
getBookThread.Name = "取书线程";
getBookThread.Start();
for (int i = 1; i <= TestMutiThrd.numIterations; i++)
{
Console.WriteLine("买书线程:书本{0}", i);
TestMutiThrd.number = i;
//Signal that a value has been written.
TestMutiThrd.SekEvent.Set();//解锁扫描线程
TestMutiThrd.buyResetEvent.WaitOne();//等待买书所有线程执行结束,才能继续
Thread.Sleep(0);
}
Thread.Sleep(1000);
Console.ReadLine();
SeekBookThread.Abort();
payMoneyThread.Abort();
getBookThread.Abort();
}
}
public class TestMutiThrd
{
public const int numIterations = 50;
//买书
public static AutoResetEvent buyResetEvent = new AutoResetEvent(false);
//扫描
public static AutoResetEvent SekEvent = new AutoResetEvent(false);
//付钱
public static AutoResetEvent PayEvent = new AutoResetEvent(false);
//取书
public static AutoResetEvent GetEvent = new AutoResetEvent(false);
//付钱和取书
public static ManualResetEvent PayGetEvent = new ManualResetEvent(false);
public static ReaderWriterLock RWLock = new ReaderWriterLock();
//static ManualResetEvent myResetEvent = new ManualResetEvent(false);
//static ManualResetEvent ChangeEvent = new ManualResetEvent(false);
public static int number; //这是关键资源
public static TestMutiThrd OTestMutiThrd = new TestMutiThrd();
public int NumIterations
{
get
{
return numIterations;
}
}
/// <summary>
/// 扫描过程
/// </summary>
public static void SeekProc()
{
while (true) //(thread.ThreadState != ThreadState.Aborted)
{
SekEvent.WaitOne();
//SekEvent.Reset();
Console.WriteLine("{0}:书本{1}", Thread.CurrentThread.Name, number);
Thread.Sleep(0);
PayEvent.Set();//解锁付款线程
//PayGetEvent.Set();//同时解锁付款和取书线程
}
}
/// <summary>
/// 付钱过程
/// </summary>
public static void PayMoneyProc()
{
while (true)
{
PayEvent.WaitOne();
Console.WriteLine("{0}:书本{1}", Thread.CurrentThread.Name, number);
Thread.Sleep(10);
GetEvent.Set();//解锁取书线程
}
}
/// <summary>
/// 取书过程
/// </summary>
public static void GetBookProc()
{
while (true)
{
GetEvent.WaitOne();
Console.WriteLine("{0}:书本{1}", Thread.CurrentThread.Name, number);
Console.WriteLine("------------------------------------------");
Thread.Sleep(10);
buyResetEvent.Set();//解锁买书线程
}
}
}