KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
To synchronize the access to my properties I use the ReaderWriterLockSlim class. I use the following code to access my properties in a thread-safe way. public class SomeClass { public readonly ReaderWriterLockSlim SyncObj = new ReaderWriterLockSlim(); public string AProperty { get { if (SyncObj.IsReadLockHeld) return ComplexGetterMethod(); SyncObj.EnterReadLock(); try { return ComplexGetterMethod(); } finally { SyncObj.ExitReadLock(); } } set { if (SyncObj.IsWriteLockHeld) ComplexSetterMethod(value); else { SyncObj.EnterWriteLock(); ComplexSetterMethod(value); SyncObj.ExitWriteLock(); } } } // more properties here ... private string ComplexGetterMethod() { // This method is not thread-safe and reads // multiple values, calculates stuff, ect. } private void ComplexSetterMethod(string newValue) { // This method is not thread-safe and reads // and writes multiple values. } } // ===================================== public static SomeClass AClass = new SomeClass(); public void SomeMultiThreadFunction() { ... // access with locking from within the setter AClass.AProperty = "new value"; ... // locking from outside of the class to increase performance AClass.SyncObj.EnterWriteLock(); AClass.AProperty = "new value 2"; AClass.AnotherProperty = "..."; ... AClass.SyncObj.ExitWriteLock(); ... } To avoid unnecessary locks whenever I get or set multiple properties a once I published the ReaderWriterLockSlim
Tags (comma-separated)
Save Edits
Cancel