展开全部
// 写了一个比较简陋的排队系统,可以参考下:classProgram{
staticvoidMain(string[]args){
ServiceWindow[]serviceWindows=newServiceWindow[Bank.MAX];
for(inti=0;i
serviceWindows[i]=newServiceWindow(){No=(i+1).ToString()};
Bankbank=newBank(serviceWindows);
Randomrand=newRandom();
//多线程模拟顾客取号
newThread(()=>{
intk=0;
while(true){
Bank.Enqueue();
if(++k>=100)break;
Thread.Sleep(1000);
}
}).Start();
//多线程模拟服务窗口e5a48de588b63231313335323631343130323136353331333363396433叫号
newThread(()=>{
while(true){
bank.ServiceWindows[rand.Next(0,Bank.MAX)].Call();
Thread.Sleep(3000);
}
}).Start();
Console.ReadKey(true);
}
}
internalclassBank{
publicconstintMAX=3;
publicstaticConcurrentQueuequeue{get;set;}
publicstaticvolatileuintcurNo=0;
publicBank(){
Init();
}
publicvoidInit()
{
queue=newConcurrentQueue();
}
publicBank(ServiceWindow[]serviceWindows)
{
Init();
ServiceWindows=serviceWindows;
}
publicServiceWindow[]ServiceWindows{get;set;}
publicstaticvoidEnqueue()
{
intk=0;
k=queue.Count();
curNo++;
queue.Enqueue(curNo);
Console.WriteLine("您的号码是:"+(curNo)+",前面还有"+k+"人在等待!");
}
}
internalclassServiceWindow{
publicStringNo{get;set;}
publicboolCall()
{
uintresult=0;
boolsuccess=false;
success=Bank.queue.TryDequeue(outresult);
if(success)Console.WriteLine(result+"号,请到"+No+"号窗口办理业务!");
returnsuccess;
}
}