class Concurrent::Transaction

Constants

ABORTED
AbortError
LeaveError
OpenEntry

Public Class Methods

current() click to toggle source
# File lib/concurrent-ruby/concurrent/tvar.rb, line 211
def self.current
  Thread.current[:current_tvar_transaction]
end
current=(transaction) click to toggle source
# File lib/concurrent-ruby/concurrent/tvar.rb, line 215
def self.current=(transaction)
  Thread.current[:current_tvar_transaction] = transaction
end
new() click to toggle source
# File lib/concurrent-ruby/concurrent/tvar.rb, line 161
def initialize
  @open_tvars = {}
end

Public Instance Methods

abort() click to toggle source
# File lib/concurrent-ruby/concurrent/tvar.rb, line 191
def abort
  unlock
end
commit() click to toggle source
# File lib/concurrent-ruby/concurrent/tvar.rb, line 195
def commit
  @open_tvars.each do |tvar, entry|
    if entry.modified
      tvar.unsafe_value = entry.value
    end
  end

  unlock
end
open(tvar) click to toggle source
# File lib/concurrent-ruby/concurrent/tvar.rb, line 176
def open(tvar)
  entry = @open_tvars[tvar]

  unless entry
    unless tvar.unsafe_lock.try_lock
      Concurrent::abort_transaction
    end

    entry = OpenEntry.new(tvar.unsafe_value, false)
    @open_tvars[tvar] = entry
  end

  entry
end
read(tvar) click to toggle source
# File lib/concurrent-ruby/concurrent/tvar.rb, line 165
def read(tvar)
  entry = open(tvar)
  entry.value
end
unlock() click to toggle source
# File lib/concurrent-ruby/concurrent/tvar.rb, line 205
def unlock
  @open_tvars.each_key do |tvar|
    tvar.unsafe_lock.unlock
  end
end
write(tvar, value) click to toggle source
# File lib/concurrent-ruby/concurrent/tvar.rb, line 170
def write(tvar, value)
  entry = open(tvar)
  entry.modified = true
  entry.value = value
end