tryenter.cs

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

CS
71
字号
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 
		{
			if (Monitor.TryEnter(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);
			}
			else
				Console.Write("P");
			} while (true);
	}

	public static void Consumer()
	{
		int value;

		do 
		{
			if (Monitor.TryEnter(buffer.BufferLock))
			{   
				if (! buffer.empty)
				{
					buffer.empty = true;
					Thread.Sleep(500);
					value = buffer.item;
					Console.WriteLine("C: {0}", value);
				}
				Monitor.Exit(buffer.BufferLock);
			}
			else
			  Console.Write("C");
			} 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 + -
显示快捷键?