usemonitor.cs

来自「vc的原码例子12 vc的原码例子12」· CS 代码 · 共 63 行

CS
63
字号
using System;
using System.Threading;

public class LockDemo
{
	class buffer
	{
		public static int item = 0;
		public static bool empty = true;
		public static object BufferLock = new Object();
	}

	public static void Producer()
	{
		int value = 0;

		do 
		{
			Monitor.Enter(buffer.BufferLock); 
			if (buffer.empty)
			{
				buffer.empty = false;
				buffer.item = value;
				value = (value == 1) ? 0: 1;
				Console.WriteLine("P: {0}", buffer.item);
			}
			Monitor.Exit(buffer.BufferLock);
		} while (true);
	}

	public static void Consumer()
	{
		int value;

		do 
		{
			Monitor.Enter(buffer.BufferLock);
			if (! buffer.empty)
			{
				buffer.empty = true;
				Thread.Sleep(500);
				value = buffer.item;
				Console.WriteLine("C: {0}", value);
			}
		    Monitor.Exit(buffer.BufferLock);
		} while (true);
	}


	public static void Main()  
	{
		ThreadStart produce = new ThreadStart(Producer);
		ThreadStart consume = new ThreadStart(Consumer);

		Thread ProducerThread = new Thread(produce);
		Thread ConsumerThread = new Thread(consume);

		ProducerThread.Start();
		ConsumerThread.Start();
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?