Skip to content

Instantly share code, notes, and snippets.

@akahigeg
Created July 22, 2013 13:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save akahigeg/6054001 to your computer and use it in GitHub Desktop.
Save akahigeg/6054001 to your computer and use it in GitHub Desktop.
use this instead of class valuables for thread safe.
# -*- encoding : utf-8 -*-
#
# for thread safe
#
class ThreadValueStore
@@value_store = {}
@@store_types = {}
def self.reserve(name, store_type = :value)
pid = rand.to_s
set_store_type(name, store_type)
@@value_store[name] ||= {}
if type_of_store_by_name(name) == :array
@@value_store[name][pid] = []
else
@@value_store[name][pid] = nil
end
pid
end
def self.set(name, pid, value)
if type_of_store_by_name(name) == :array
@@value_store[name][pid] << value
else
@@value_store[name][pid] = value
end
end
class << self
alias_method :push, :set
end
def self.unshift(name, pid, value)
@@value_store[name][pid].unshift(value)
end
def self.get(name, pid)
@@value_store[name][pid]
end
def self.release(name, pid)
@@value_store[name].delete(pid)
end
private
def self.type_of_store_by_name(name)
@@store_types[name]
end
# @param name [Symbol]
# @param store_type [Symbol] :array and else
def self.set_store_type(name, store_type)
@@store_types[name] = store_type
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment