All pastes #939557 Raw Edit

tobz

public text v1 · immutable
·published 2008-03-12 11:49 UTC
rendered paste body
public class Money
	{
		private long m_val;

		public Money(long val)
		{
			m_val = val;
		}

		public long Value
		{
			get
			{
				return m_val;
			}
		}

		public void AddToMoney(long val)
		{
			Interlocked.Add(ref m_val, val);
		}

		public bool CheckAndDeduct(long removeAmt)
		{
			long exch;
			long cmp, newcmp = Interlocked.Read(ref m_val);

			do
			{
				if (Interlocked.Read(ref m_val) < removeAmt)
				{
					return false;
				}

				cmp = newcmp; exch = m_val - removeAmt;
			}
			while ((newcmp = Interlocked.CompareExchange(ref m_val, exch, cmp)) != cmp);

			return true;
		}
	}