title: Object synchronization method was called from an unsynchronized block of code
body: <p>I receive an exception in production with message "Object synchronization method was called from an unsynchronized block of code" on Mutex.ReleaseMutex() in following code:</p>
  
  <pre><code>Mutex Mutex
  {
      get { return mutex ?? (mutex = new Mutex(false, mutexName)); }
  }
  [NonSerialized]
  Mutex mutex;
  
  public void Log(/*...*/)
  {
      Mutex.WaitOne();
      try
      {
          /*...*/
      }
      finally
      {
          Mutex.ReleaseMutex();
      }
  }
  </code></pre>
  
  <p>There may be saveral processes which can use mutexes with different and same mutextName.
  And still I am not sure how that exception can happen there.</p>