What is the safest (and shortest) way do lock read/write access to static members in a multithreaded environment in C#?
Is it possible to do the threadsafe locking & unlocking on class level (so I don’t keep repeating lock/unlock code every time static member access is needed)?
Edit: Sample code would be great 🙂
Edit: Should I use the volatile keyword or Thread.MemoryBarrier() to avoid multiprocessor caching or is that unnecessary? According to Jon Skeet only those will make changes visible to other processors? (Asked this separately here).
The safest and shortest way is to create a private, static field of type
Objectthat is only used for locking (think of it as a “pad-lock” object). Use this and only this field to lock on as this prevent other types from locking up your code when then lock on the same type that you do.If you lock on the type itself there is risk that another type will also decide to lock on your type and this could create deadlocks.
Here is an example:
Notice that I have create a private, static field for locking
foo– I use that field to lock the write operations on that field.