Monitor

Work In Progress

Monitor is Mutex can be Reentrant. Reentrancy example Pull Request. Reentrant means locks are acquired per-thread instead of per-usage. Source code can be found here.

Monitor is possible to have nested synchornize loop like this:

require "monitor"

monitor = Monitor.new

monitor.synchornize do
  monitor.synchornize do
    ...
  end
end

If you use Mutex will result in deadlock:

mutex = Mutex.new

mutex.synchornize do
  mutex.synchornize do
    ...
  end
end

The performance gain of using Mutex is almost always neglectable, so it seems like a good choice to avoid a serious deadlock issue to use Monitor when you don’t know if the code you wrap also has synchornize block inside it or not.

See also: Mutex.