How to execute a block of code only once on a multithreading environment?
c#, multithreading, thread-safety, wpf
Solution
Simplest would be to add
[MethodImpl(MethodImplOptions.Synchronized)]
public override MyObject Load()
{
//snip
}
but be aware this puts a lock on the entire object, not just the method. Not really great practice.
http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.methodimploptions.aspx
Synchronized
Specifies that the method can be executed by only one thread at a time. Static methods lock on the type, whereas instance methods lock on the instance. Only one thread can execute in any of the instance functions, and only one thread can execute in any of a class's static functions.
Problem
The following code block, performs loading of an object in C#. ``` public bool IsModelLoaded { get; set; } public override MyObject Load() { if (!IsModelLoaded) { Model = MyService.LoadMyObject(Model); IsModelLoaded = true; } return Model; } ``` My intention is to run this block only once, and hence loading the `Model` only once. Nevertheless, this code block runs twice from 2 different threads. How can I make sure that this block runs only once? (on multiple threads).