using System;
using System.Threading;
using System.Collections.Generic;
namespace LittleChat
{
public class LittleChat
{
Queue<string> chatContent = new Queue<string>();
public void Write(string chatInfor)
{
lock (this)
{
chatContent.Enqueue(chatInfor);
}
}
public void Read()
{
lock (this)
{
for (int i = 0; i < chatContent.Count; i++)
{
Console.WriteLine(chatContent.Dequeue());
}
}
}
}
public class ChatCons
{
LittleChat littleChat;
public ChatCons(LittleChat littleChat)
{
this.littleChat = littleChat;
}
public void ThreadRun()
{
littleChat.Read();
}
}
public class ChatProd
{
LittleChat littleChat;
string input;
public ChatProd(LittleChat littleChat,string input)
{
this.littleChat = littleChat;
this.input = input;
}
public void ThreadRun()
{
littleChat.Write(input);
ChatCons cons = new ChatCons(littleChat);
cons.ThreadRun();
}
}
public class MonitorSample
{
public static void Main(string[] args)
{
LittleChat littleChat = new LittleChat();
ChatProd[] prod = new ChatProd[5];
Thread[] producers = new Thread[prod.Length];
for (int i = 0; i < prod.Length; i++)
{
prod[i] = new ChatProd(littleChat, Console.ReadLine());
producers[i] = new Thread(new ThreadStart(prod[i].ThreadRun));
producers[i].Start();
}
Console.ReadKey();
}
}
}