Mega Code Archive

 
Categories / C# Tutorial / Thread
 

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);     } } No Name, balance: 0.0, last updated: 25/03/2007 3:04:25 PM