Issue #10076 has been updated by Motohiro KOSAKI.


Your code is very artifactual and the patch of comment #2 reduce a performance of normal case. So, until someone provide a real usecase, I don't take it.

----------------------------------------
Bug #10076: 2nd thread can't get mutex even though 1st thread released it (race)
https://bugs.ruby-lang.org/issues/10076#change-48131

* Author: Dmitry Maksyoma
* Status: Feedback
* Priority: Normal
* Assignee: 
* Category: lib
* Target version: 
* ruby -v: ruby 2.1.2p95 (2014-05-08 revision 45877) [i686-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
~~~ruby
require 'thread'

m = Mutex.new

Thread.abort_on_exception = true
Thread.new {
  loop {
    m.synchronize {
      puts 'got mutex in thread'
      sleep 0.1
    }
  }
}

loop {
  m.synchronize {
    puts 'got mutex in loop'
    sleep 1
  }
  # Without sleep, the thread above has no chance of getting the mutex.
  #sleep 0.1
}
~~~


---Files--------------------------------
monitor-test (344 Bytes)


-- 
https://bugs.ruby-lang.org/