class I18n::Tasks::Concurrent::CachedValue
A thread-safe memoized value. The given computation is guaranteed to be invoked at most once. @since 0.9.25
Constants
- NULL
Public Class Methods
Source
# File lib/i18n/tasks/concurrent/cached_value.rb, line 11 def initialize(&computation) @computation = computation @mutex = Mutex.new @result = NULL end
@param [Proc] computation The computation that returns the value to cache.
Public Instance Methods
Source
# File lib/i18n/tasks/concurrent/cached_value.rb, line 18 def get return get_result_volatile unless get_result_volatile == NULL @mutex.synchronize do next unless get_result_volatile == NULL set_result_volatile @computation.call @computation = nil end get_result_volatile end
@return [Object] Result of the computation.
Private Instance Methods
Source
# File lib/i18n/tasks/concurrent/cached_value.rb, line 39 def get_result_volatile Rubinius.memory_barrier @result end
Source
# File lib/i18n/tasks/concurrent/cached_value.rb, line 44 def set_result_volatile(value) @result = value Rubinius.memory_barrier end