Using a reader-writer lock to protect a complex business type : ReaderWriterLock : Thread C# Examples


C# Examples » Thread » ReaderWriterLock »

 

Using a reader-writer lock to protect a complex business type









    
using  System;
using  System.Collections.Generic;
using  System.Diagnostics;
using  System.IO;
using  System.Reflection;
using  System.Runtime;
using  System.Runtime.CompilerServices;
using  System.Security;
using  System.Text;
using  System.Threading;

class  Account
{
        public  string  company  ="No  Name";
        public  decimal  balance=  0.0m;
        public  DateTime  lastUpdate  =  DateTime.Now;
        public  ReaderWriterLock  syncLock  =  new  ReaderWriterLock();

        public  decimal  AutoUpdateBalance(decimal  delta)
        {
                syncLock.AcquireWriterLock(-1);
                try
                {
                        balance  +=  delta;
                        lastUpdate  =  DateTime.Now;
                        return  balance;
                }
                finally
                {
                        syncLock.ReleaseWriterLock();
                }
        }

        public  void  GetState(out  string  company,  out  decimal  balance,  out  DateTime  lastUpdate)
        {
                syncLock.AcquireReaderLock(-1);
                try
                {
                        company  =  this.company;
                        balance  =  this.balance;
                        lastUpdate  =  this.lastUpdate;
                }
                finally
                {
                        syncLock.ReleaseReaderLock();
                }
        }
}


public  class  MainClass
{
        
        public  static  void  Main()
        {
                Account  account  =  new  Account();

                string  company;
                decimal  balance;
                DateTime  lastUpdate;

                account.GetState(out  company,  out  balance,  out  lastUpdate);
                Console.WriteLine("{0},  balance:  {1},  last  updated:  {2}",company,  balance,  lastUpdate);
        }
}
    
   
  
   



Output

No Name, balance: 0.0, last updated: 25/03/2007 3:04:25 PM


HTML code for linking to this page:

Follow Navioo On Twitter

C# Examples

 Navioo Thread
» ReaderWriterLock