title: Why are immutable objects thread-safe?
body: <pre><code>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; } }
  }
  </code></pre>
  
  <p>Multiple threads have access to <code>Unit.Gram</code>. Why is it ok for multiple threads simultaneously read <code>Unit.Gram.Title</code>?</p>
  
  <p>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?</p>