// 写了一个比较简陋的排队系统,可以参考下:
class Program{
static void Main(string[] args){
ServiceWindow[] serviceWindows = new ServiceWindow[Bank.MAX];
for (int i = 0; i < Bank.MAX; i++)
serviceWindows[i] = new ServiceWindow() { No = (i + 1).ToString() };
Bank bank = new Bank(serviceWindows);
Random rand = new Random();
// 多线程模拟顾客取号
new Thread(() =>{
int k = 0;
while (true){
Bank.Enqueue();
if (++k>=100) break;
Thread.Sleep(1000);
}
}).Start();
// 多线程模拟服务窗口叫号
new Thread(() =>{
while (true){
bank.ServiceWindows[rand.Next(0, Bank.MAX)].Call();
Thread.Sleep(3000);
}
}).Start();
Console.ReadKey(true);
}
}
internal class Bank{
public const int MAX = 3;
public static ConcurrentQueuequeue { get; set; }
public static volatile uint curNo=0;
public Bank() {
Init();
}
public void Init()
{
queue = new ConcurrentQueue();
}
public Bank(ServiceWindow[] serviceWindows)
{
Init();
ServiceWindows = serviceWindows;
}
public ServiceWindow[] ServiceWindows { get; set; }
public static void Enqueue()
{
int k = 0;
k = queue.Count();
curNo++;
queue.Enqueue(curNo);
Console.WriteLine("您的号码是:" + (curNo) + ",前面还有" + k + "人在等待!");
}
}
internal class ServiceWindow{
public String No { get; set; }
public bool Call()
{
uint result=0;
bool success=false;
success = Bank.queue.TryDequeue(out result);
if(success) Console.WriteLine(result+"号,请到"+No+"号窗口办理业务!");
return success;
}
}