module DSLKit::ThreadGlobal
def thread_global(name, default_value = nil)
Define a thread global variable named _name_ in this module/class. If the
def thread_global(name, default_value = nil) is_a?(Module) or raise TypeError, "receiver has to be a Module" name = name.to_s var_name = "@__#{name}_#{__id__.abs}__" lock = Mutex.new modul = self define_method(name) do lock.synchronize { modul.instance_variable_get var_name } end define_method(name + "=") do |value| lock.synchronize { modul.instance_variable_set var_name, value } end modul.instance_variable_set var_name, default_value if default_value self end