在Ruby中,單例模式確保一個類只有一個實例,并提供一個全局訪問點。在并發環境下,我們需要確保單例模式的實例在所有線程之間是共享的。為了實現這一點,我們可以使用Ruby的Mutex
(互斥鎖)來確保在同一時間只有一個線程可以訪問單例實例。
下面是一個使用Mutex
實現的Ruby單例模式示例:
class Singleton
@@instance = nil
@@mutex = Mutex.new
def self.instance
# 如果實例不存在,則創建一個新實例
if @@instance.nil?
# 使用互斥鎖確保只有一個線程可以訪問實例
@@mutex.synchronize do
if @@instance.nil?
@@instance = new
end
end
end
# 返回唯一的實例
@@instance
end
def initialize
# 初始化代碼
end
end
在這個示例中,我們使用@@mutex.synchronize
來確保在同一時間只有一個線程可以訪問@@instance
。這樣,我們可以確保在并發環境下單例模式的實例是共享的。
需要注意的是,雖然這個示例使用了Mutex
來處理并發,但在某些情況下,過度使用鎖可能會導致性能問題。在這種情況下,可以考慮使用其他并發控制機制,例如原子操作或者線程局部存儲。