Csharp/C Sharp by API/System.Threading/ReaderWriterLock — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
|
(нет различий)
|
Текущая версия на 15:08, 26 мая 2010
Содержание
ReaderWriterLock.AcquireWriterLock
<source lang="csharp"> using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime; using System.Runtime.rupilerServices; using System.Security; using System.Text; using System.Threading; public class MainClass {
public static void Main() { ReaderWriterLock rwLock = new ReaderWriterLock(); rwLock.AcquireWriterLock(250); if (rwLock.IsWriterLockHeld) { Console.WriteLine("Writer lock held"); rwLock.ReleaseWriterLock(); } rwLock.ReleaseWriterLock(); }
}
</source>
ReaderWriterLock.DowngradeFromWriterLock
<source lang="csharp"> using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime; using System.Runtime.rupilerServices; using System.Security; using System.Text; using System.Threading; public class MainClass {
public static void Main() { ReaderWriterLock rwLock = new ReaderWriterLock(); rwLock.AcquireReaderLock(250); if (!rwLock.IsReaderLockHeld) return; Console.WriteLine("Reader lock held"); LockCookie cookie = rwLock.UpgradeToWriterLock(250); if (rwLock.IsWriterLockHeld) { Console.WriteLine("Upgraded to writer lock"); rwLock.DowngradeFromWriterLock(ref cookie); } rwLock.ReleaseReaderLock(); }
}
</source>
ReaderWriterLock.IsReaderLockHeld
<source lang="csharp"> using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime; using System.Runtime.rupilerServices; using System.Security; using System.Text; using System.Threading; public class MainClass {
public static void Main() { ReaderWriterLock rwLock = new ReaderWriterLock(); rwLock.AcquireReaderLock(250); if (!rwLock.IsReaderLockHeld) return; Console.WriteLine("Reader lock held"); LockCookie cookie = rwLock.UpgradeToWriterLock(250); if (rwLock.IsWriterLockHeld) { Console.WriteLine("Upgraded to writer lock"); rwLock.DowngradeFromWriterLock(ref cookie); } rwLock.ReleaseReaderLock(); }
}
</source>
ReaderWriterLock.IsWriterLockHeld
<source lang="csharp"> using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime; using System.Runtime.rupilerServices; using System.Security; using System.Text; using System.Threading; public class MainClass {
public static void Main() { ReaderWriterLock rwLock = new ReaderWriterLock(); rwLock.AcquireReaderLock(250); if (!rwLock.IsReaderLockHeld) return; Console.WriteLine("Reader lock held"); LockCookie cookie = rwLock.UpgradeToWriterLock(250); if (rwLock.IsWriterLockHeld) { Console.WriteLine("Upgraded to writer lock"); rwLock.DowngradeFromWriterLock(ref cookie); } rwLock.ReleaseReaderLock(); }
}
</source>
ReaderWriterLock.ReleaseReaderLock()
<source lang="csharp"> using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime; using System.Runtime.rupilerServices; 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.rupany; 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); }
}
</source>