File: lock_local_var.rb

package info (click to toggle)
ruby-concurrent 1.3.5-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,136 kB
  • sloc: ruby: 30,875; java: 6,128; ansic: 265; makefile: 26; sh: 19
file content (28 lines) | stat: -rw-r--r-- 724 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
require 'concurrent/utility/engine'
require_relative 'fiber_local_var'
require_relative 'thread_local_var'

module Concurrent
  # @!visibility private
  def self.mutex_owned_per_thread?
    return false if Concurrent.on_jruby? || Concurrent.on_truffleruby?

    mutex = Mutex.new
    # Lock the mutex:
    mutex.synchronize do
      # Check if the mutex is still owned in a child fiber:
      Fiber.new { mutex.owned? }.resume
    end
  end

  if mutex_owned_per_thread?
    LockLocalVar = ThreadLocalVar
  else
    LockLocalVar = FiberLocalVar
  end

  # Either {FiberLocalVar} or {ThreadLocalVar} depending on whether Mutex (and Monitor)
  # are held, respectively, per Fiber or per Thread.
  class LockLocalVar
  end
end