class Storage def initialize(storage: {}) @storage = storage @mutex = Mutex.new end def key?(key) with_lock { @storage.key?(key) } end def [](key) with_lock { @storage[key] } end def []=(key, value) with_lock { @storage[key] = value } end def delete(key) with_lock { @storage.delete(key) } end private def with_lock @mutex.synchronize do yield end end end