#region 描述
//通过AutoResetEvent来控制多线程的执行先后顺序,以实现 拿书-付钱 这样的恒定步骤,通常情况下,若要实现类似的逻辑,需要两个锁。
#endregion
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace ConsoleApp13
{
class Program
{
static AutoResetEvent myResetEvent = new AutoResetEvent(false);
static AutoResetEvent changeEvent = new AutoResetEvent(true);//构造函数中为true,表示将其置为有信号
static void Main(string[] args)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(GetBookProc));
ThreadPool.QueueUserWorkItem(new WaitCallback(PayMoneyProc));
Console.ReadKey();
}
static void PayMoneyProc(object state)
{
while (true)
{
myResetEvent.WaitOne();
Console.WriteLine("PayMoney");
changeEvent.Set();
Thread.Sleep(1000);
}
}
static void GetBookProc(object state)
{
while(true)
{
changeEvent.WaitOne();
Console.WriteLine("GetBook");
Thread.Sleep(0);//若为0,则暂时不会挂起
myResetEvent.Set();
}
}
}
}
AutoResetEvent的使用
最新推荐文章于 2023-07-07 10:38:15 发布