class Concurrent::AbstractThreadLocalVar
@!visibility private
@!macro internal_implementation_note
@!macro thread_local_var
def allocate_storage
def allocate_storage raise NotImplementedError end
def bind(value, &block)
def bind(value, &block) if block_given? old_value = self.value begin self.value = value yield ensure self.value = old_value end end end
def default
def default if @default_block self.value = @default_block.call else @default end end
def initialize(default = nil, &default_block)
def initialize(default = nil, &default_block) if default && block_given? raise ArgumentError, "Cannot use both value and block as default value" end if block_given? @default_block = default_block @default = nil else @default_block = nil @default = default end allocate_storage end
def value
def value raise NotImplementedError end
def value=(value)
def value=(value) raise NotImplementedError end