Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why are immutable objects thread-safe?

class Unit {     private readonly string name;     private readonly double scale;      public Unit(string name, double scale) {         this.name = name;         this.scale = scale,     }      public string Name { get { return name; } }     public string Scale { get { return scale; } }      private static Unit gram = new Unit("Gram", 1.0);      public Unit Gram { get { return gram; } } } 

Multiple threads have access to Unit.Gram. Why is it ok for multiple threads simultaneously read Unit.Gram.Title?

My concern is that they are referring to the same memory location. One thread starts reading that memory, so isn't it "locked out" then? Does the .NET handle synchronization for this critical section underneath? Or am I wrong in thinking that simultaneous reading needs synchronization?

like image 919
randomguy Avatar asked Aug 29 '10 14:08

randomguy


1 Answers

What makes an object not thread safe? An object is not thread safe if the value/state of that object can change while a thread is reading it. This generally happens if a second thread changes this object's value while the first thread is reading it.

An immutable object, by definition, cannot change value/state. Since every time you read an immutable object it has the same value/state, you can have any number of threads read that object with no concerns.

like image 191
Starkey Avatar answered Oct 17 '22 23:10

Starkey