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.