Thread safety on readonly static field initialisation

If one creates a readonly static member like this:

public sealed class MyClass
{
    public readonly static MyClass Instance = new MyClass();
}

We know that the static constructor will initialise the MyClass.Instance field if some thread accesses MyClass the fist time. But, will a single instance (in this case MyClass) be created if multiple threads all accesses MyClass at the same time (i.e. is the initialisation of the static field thread-safe)?


Solution 1:

.NET CLR ensures that static initialization is always thread-safe. No matter how many threads are accessing it and what order, it will always be initialized once.

Your code seems to show signs of the beginnings of a Singleton pattern.
Basically if you want to run custom code before you initialize the class, then you need to ensure thread-safety on your own.
This is an example where you would need to make your custom code thread safe. But the static initialization part is always thread safe.

Solution 2:

The class initialization is guaranteed by the specification of the C# language to be thread safe, so only one instance of MyClass will be created. You would have to ensure thread safety from that point onwards yourself. Here's an MSDN reference:

http://msdn.microsoft.com/en-us/library/aa645612.aspx