menuTicketing

Ticketing Ruby لائبریری

GitHub

ریپوزیٹری

مثال

بنیادی مثال

سرور سے جڑ کر ایک لاک حاصل کرنے اور فوراً واپس کرنے کا سب سے سادہ سلسلہ۔

ruby
broker = Broker.connect(addr)
begin
  broker.wait_ready(5)

  ticket = broker.acquire("key", wait: 5, lease: 30)
  ticket.release

  puts "pass"
ensure
  broker.close
end

ہم آہنگی کی مثال (ڈسٹری بیوٹڈ لاک)

کئی تھریڈز بیک وقت اکاؤنٹ کے لحاظ سے لاک کے ذریعے محفوظ رہ کر جمع و انخلا دہراتے رہیں، تب بھی تمام اکاؤنٹ بیلنس آخرکار ابتدائی قدر پر واپس آتے ہیں یا نہیں، اس کی تصدیق کرنے کی مثال ہے۔

ruby
def transaction(broker, balances, account, delta, log)
  key = "account-#{account}"
  ticket =
    begin
      broker.acquire(key, wait: WAIT, lease: LEASE)
    rescue StandardError => e
      log.error("account #{account} acquire failed: #{e}")
      return
    end

  before = balances[account]
  Thread.pass
  after = before + delta
  balances[account] = after
  ticket.release

  action, sign = delta < 0 ? ["withdraw", "-"] : ["deposit", "+"]
  log.info("account #{account} #{action} #{sign}$#{AMOUNT} -> $#{after}")
end

مکمل مثال test_example.rb، test_bank_example.rb، test_bench.rb میں دیکھیں۔