20.4. Synchronizacja dostępu do obiektu

Problem

Chcemy, aby w określonym czasie obiekt był dostępny tylko dla jednego wątku.

Rozwiązanie

W obiekcie opisującym wątek należy zdefiniować składową Mutex (semafor wskazujący wątek, który w określonym momencie powinien mieć dostęp do obiektu). Można go wykorzystać do synchronizacji operacji z obiektem.

W poniższym kodzie dla każdego obiektu zdefiniowano metodę synchronize. Jest to symulacja działania Javy, gdzie synchronize jest słowem kluczowym, które można stosować do wszystkich obiektów:

require 'thread'
class Object
  def synchronize
    mutex.synchronize { yield self }
  end

  def mutex
    @mutex ||= Mutex.new
  end
end

Oto przykład: pierwszy wątek ustanawia blokadę dla listy, a następnie zatrzymuje ...

Get Ruby. Receptury now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.