Ruby單例模式怎樣保證數(shù)據(jù)一致性

小樊
81
2024-11-01 21:18:04

在Ruby中,單例模式可以通過(guò)使用類變量和類方法來(lái)確保數(shù)據(jù)一致性。以下是一個(gè)簡(jiǎn)單的Ruby單例模式實(shí)現(xiàn),展示了如何保證數(shù)據(jù)一致性:

class Singleton
  @@instance = nil

  def self.instance
    return @@instance if @@instance

    # 使用鎖來(lái)確保只有一個(gè)線程可以創(chuàng)建實(shí)例
    lock = Mutex.new
    lock.synchronize do
      return @@instance if @@instance

      # 創(chuàng)建實(shí)例并存儲(chǔ)在類變量中
      @@instance = new
    end
  end

  def initialize
    @data = {}
  end

  def add_data(key, value)
    @data[key] = value
  end

  def get_data(key)
    @data[key]
  end
end

在這個(gè)例子中,我們使用了一個(gè)類變量@@instance來(lái)存儲(chǔ)唯一的實(shí)例。instance方法首先檢查@@instance是否已經(jīng)存在,如果存在則直接返回。如果不存在,我們使用Mutex來(lái)確保在同一時(shí)間只有一個(gè)線程可以創(chuàng)建實(shí)例。這樣可以避免多個(gè)線程同時(shí)創(chuàng)建實(shí)例,從而保證數(shù)據(jù)一致性。

在實(shí)例創(chuàng)建后,我們可以使用add_dataget_data方法來(lái)添加和獲取數(shù)據(jù)。由于單例模式只允許創(chuàng)建一個(gè)實(shí)例,因此這些方法在所有線程之間共享,從而保證了數(shù)據(jù)一致性。

0