using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace MutiThreadTest
{
class Program
{
static void Main(string[] args)
{
Thread SeekBookThread = new Thread(new ThreadStart(TestMutiThrd.SeekProc));
SeekBookThread.Name = "扫描线程";
SeekBookThread.Start();
Thread payMoneyThread = new Thread(new ThreadStart(TestMutiThrd.PayMoneyProc));
payMoneyThread.Name = "付钱线程";
payMoneyThread.Start();
Thread getBookThread = new Thread(new ThreadStart(TestMutiThrd.GetBookProc));
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 = 10;
//买书
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)
{
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)
{
PayGetEvent.WaitOne();
//PayEvent.WaitOne();
Console.WriteLine("{0}:书本{1}", Thread.CurrentThread.Name, number);
Thread.Sleep(10);
//GetEvent.Set();//解锁取书线程
}
}
/// <summary>
/// 取书过程
/// </summary>
public static void GetBookProc()
{
while (true)
{
PayGetEvent.WaitOne();
PayGetEvent.Reset();//不加 无限执行下去
//GetEvent.WaitOne();
Console.WriteLine("{0}:书本{1}", Thread.CurrentThread.Name, number);
Console.WriteLine("------------------------------------------");
Thread.Sleep(10);
buyResetEvent.Set();//解锁买书线程
}
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace MutiThreadTest
{
class Program
{
static void Main(string[] args)
{
Thread SeekBookThread = new Thread(new ThreadStart(TestMutiThrd.SeekProc));
SeekBookThread.Name = "扫描线程";
SeekBookThread.Start();
Thread payMoneyThread = new Thread(new ThreadStart(TestMutiThrd.PayMoneyProc));
payMoneyThread.Name = "付钱线程";
payMoneyThread.Start();
Thread getBookThread = new Thread(new ThreadStart(TestMutiThrd.GetBookProc));
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 = 10;
//买书
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)
{
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)
{
PayGetEvent.WaitOne();
//PayEvent.WaitOne();
Console.WriteLine("{0}:书本{1}", Thread.CurrentThread.Name, number);
Thread.Sleep(10);
//GetEvent.Set();//解锁取书线程
}
}
/// <summary>
/// 取书过程
/// </summary>
public static void GetBookProc()
{
while (true)
{
PayGetEvent.WaitOne();
PayGetEvent.Reset();//不加 无限执行下去
//GetEvent.WaitOne();
Console.WriteLine("{0}:书本{1}", Thread.CurrentThread.Name, number);
Console.WriteLine("------------------------------------------");
Thread.Sleep(10);
buyResetEvent.Set();//解锁买书线程
}
}
}
}