//from
//http://www.microsoft.com/china/community/Column/94.mspxclass MonitorSample
{
private Queue _queue = new Queue();
public void Producer()
{
int counter = 0;
lock( _queue )//判断该资源是否被其他线程占用
{
while( counter < 2 )
{
Monitor.Wait( _queue );//暂时放弃调用线程对该资源的锁,让Consumer执行
_queue.Enqueue( counter );//生成一个资源
Console.WriteLine( String.Format( "生产:{0}", counter ) );
Monitor.Pulse( _queue );//通知在Wait中阻塞的Consumer线程即将执行
counter++;
}
}
}
public void Consumer()
{
lock( _queue )
{
Monitor.Pulse( _queue );//通知在Wait中阻塞的Producer线程即将执行
while( Monitor.Wait( _queue, 10 ) )
{
int counter = ( int ) _queue.Dequeue();//取出一个资源
Console.WriteLine( String.Format( "消费:{0}", counter ) );
Monitor.Pulse( _queue );//通知在Wait中阻塞的Producer线程即将执行
}
}
}
static void Main(string[] args)
{
MonitorSample monitor = new MonitorSample();
Thread producer = new Thread( new ThreadStart( monitor.Producer ) );
Thread consumer = new Thread( new ThreadStart( monitor.Consumer ) );
producer.Start();
consumer.Start();
producer.Join();
consumer.Join();
Console.ReadLine();
}
}
//http://www.microsoft.com/china/community/Column/94.mspxclass MonitorSample
{
private Queue _queue = new Queue();
public void Producer()
{
int counter = 0;
lock( _queue )//判断该资源是否被其他线程占用
{
while( counter < 2 )
{
Monitor.Wait( _queue );//暂时放弃调用线程对该资源的锁,让Consumer执行
_queue.Enqueue( counter );//生成一个资源
Console.WriteLine( String.Format( "生产:{0}", counter ) );
Monitor.Pulse( _queue );//通知在Wait中阻塞的Consumer线程即将执行
counter++;
}
}
}
public void Consumer()
{
lock( _queue )
{
Monitor.Pulse( _queue );//通知在Wait中阻塞的Producer线程即将执行
while( Monitor.Wait( _queue, 10 ) )
{
int counter = ( int ) _queue.Dequeue();//取出一个资源
Console.WriteLine( String.Format( "消费:{0}", counter ) );
Monitor.Pulse( _queue );//通知在Wait中阻塞的Producer线程即将执行
}
}
}
static void Main(string[] args)
{
MonitorSample monitor = new MonitorSample();
Thread producer = new Thread( new ThreadStart( monitor.Producer ) );
Thread consumer = new Thread( new ThreadStart( monitor.Consumer ) );
producer.Start();
consumer.Start();
producer.Join();
consumer.Join();
Console.ReadLine();
}
}
解决方案 »
- 求解决C#中listview高亮显示鼠标停留行时候的重绘问题
- C#Winform中使用Panel切换的特效
- 请教一个关于在透明窗体画半透明图形的问题
- C#多线程访问时如何才能把文件锁定,避免同时访问?
- 使用c# Socket开发软件产品,需要在Socket程序里注意哪些技术方面的处理.
- 高分求提示 ContextMenuStrip的问题
- 有谁知道怎么让MDI子窗体的标题栏合并到父窗体的菜单栏上 ( C# 2005 )
- 小弟想弄清楚vpn的实际概念!请大家帮忙!急啊!
- 当用户访问某个页面时,用代码实现弹出一个Windows 的login窗口
- 右键单击ClassView(类视图)中的类名,自动退出IDE。
- winform中弹出窗口
- visual studio 2005 C#里面的webbrowser控件和microsoft Web浏览器 控件
Thread.Suspend();根本实现不了!!