⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 monitorsample.cs

📁 c#多线程源代码
💻 CS
字号:
using System;
using System.Threading;

public class MonitorSample
{
	public static void Main(String[] args)
	{
		int result = 0; 
		Cell cell = new Cell( );

		CellProd prod = new CellProd(cell, 20); 
		CellCons cons = new CellCons(cell, 20); 

		Thread producer = new Thread(new ThreadStart(prod.ThreadRun));
		Thread consumer = new Thread(new ThreadStart(cons.ThreadRun));

		try
		{
			producer.Start( );
			consumer.Start( );

			producer.Join( );
			consumer.Join( );  
			Console.ReadLine();
		}
		catch (ThreadStateException e)
		{
			Console.WriteLine(e);  
			result = 1; 
		}
		catch (ThreadInterruptedException e)
		{
			Console.WriteLine(e); 
			result = 1;
		}
		Environment.ExitCode = result;
	}
}

public class CellProd
{
	Cell cell;         
	int quantity = 1; 

	public CellProd(Cell box, int request)
	{
		cell = box;          
		quantity = request;  
	}
	public void ThreadRun( )
	{
		for(int looper=1; looper<=quantity; looper++)
			cell.WriteToCell(looper);
	}
}

public class CellCons
{
	Cell cell;        
	int quantity = 1;  

	public CellCons(Cell box, int request)
	{
		cell = box;        
		quantity = request; 
	}
	public void ThreadRun( )
	{
		int valReturned;
		for(int looper=1; looper<=quantity; looper++)
			valReturned=cell.ReadFromCell( );
	}
}

public class Cell
{
	int cellContents;        
	bool readerFlag = false; 
	public int ReadFromCell( )
	{
		lock(this)
		{
			if (!readerFlag)
			{   
				try
				{
					Monitor.Wait(this);
				}
				catch (SynchronizationLockException e)
				{
					Console.WriteLine(e);
				}
				catch (ThreadInterruptedException e)
				{
					Console.WriteLine(e);
				}
			}
			Console.WriteLine("Consume: {0}",cellContents);
			readerFlag = false;    
			Monitor.Pulse(this);  
		} 
		return cellContents;
	}
   
	public void WriteToCell(int n)
	{
		lock(this) 
		{
			if (readerFlag)
			{  
				try
				{
					Monitor.Wait(this); 
				}
				catch (SynchronizationLockException e)
				{
					Console.WriteLine(e);
				}
				catch (ThreadInterruptedException e)
				{
					Console.WriteLine(e);
				}
			}
			cellContents = n;
			Console.WriteLine("Produce: {0}",cellContents);
			readerFlag = true;    
			Monitor.Pulse(this);  
		} 
	}
}

⌨️ 快捷键说明

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