class1.cs

来自「《c#技术内幕代码》」· CS 代码 · 共 95 行

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

namespace Ch12_5
{
	class Account 
	{
		int fBalance;
		Boolean fLocks;

		Random r = new Random();

		internal Account(Boolean useLocks, int initial) 
		{
			fBalance = initial;
			fLocks = useLocks;
		}

		internal int DoTransaction(Boolean doLock, int amount) 
		{

			if (fBalance < 0) 
			{
				throw new Exception("Negative fBalance");
			}
			if ( doLock )
			{
				lock (this)
				{
					if (fBalance >= amount) 
					{
						Thread.Sleep(5);
						fBalance = fBalance - amount;
						return amount;
					} 
					else 
					{
						return 0; // transaction rejected
					}
				}
			}
			else
			{
				if (fBalance >= amount) 
				{
					Thread.Sleep(5);
					fBalance = fBalance - amount;
					return amount;
				} 
				else 
				{
					return 0; // transaction rejected
				}
			}
		}

		internal void DoTransactions() 
		{
			for (int i = 0; i < 100; i++) 
			{
				DoTransaction(fLocks, r.Next(-50, 100));
			}
		}
	}

	class CH12_5
	{

		static Thread[] threads = new Thread[10];

		public static void Main(string[] args) 
		{
			Boolean doLock = false;

			if ( args[0] == "lock" )
				doLock = true;
			else
				doLock = false;

			Account acc = new Account (doLock, 0);

			for (int i = 0; i < 10; i++) 
			{
				Thread t = new Thread(new ThreadStart(acc.DoTransactions));
				threads[i] = t;
			}

			for (int i = 0; i < 10; i++) 
			{
				threads[i].Start();
			}
		}
	}
}

⌨️ 快捷键说明

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