From: Masatoshi SEKI Date: 2000-10-28T01:41:50+09:00 Subject: [ruby-talk:5926] Re: [RFC] Towards a new synchronisation primitive Hi, I worte too Mutex Mix-in "MutexM". (see [ruby-list:23787]) [RAA:MutexM] --> http://www.ruby-lang.org/en/raa-list.rhtml?name=MutexM MutexM futures: * Mix-in class * reentrant synchronize * synchronized(): define synchronized method * synchronize_reader, synchronize_writer, synchronize_accessor: define synchronized attr_reader/writer/accessor * in_synchronize raise ThreadError unless locked? Sample code: class Foo include MutexM def initialize super @foo = nil @bar = nil @count = 0 end synchronize_accessor(:foo) # synchronized accessor lock_accessor("bar") # accessor that raise ThredError unless locked? def commit in_synchronize # raise ThreadError unless locked? p [@foo, @bar] end def sleep_and_set # sleep 0.5 @foo = @foo + @foo sleep 0.5 @bar = @bar + @foo [@foo, @bar] end synchronized :sleep_and_set # define synchronized method end f = Foo.new f.foo = 1 p f f.synchronize do f.foo = 3 # reentrant synchronize f.bar = 2 f.commit end p f begin f.bar = 4 # raise ThreadError rescue ThreadError p $! end p f Thread.new do p f.sleep_and_set # synchronized end sleep 0.2 f.foo = 5 sleep 2 p f From: Robert Feldt Subject: [ruby-talk:5916] Re: [RFC] Towards a new synchronisation primitive Date: Fri, 27 Oct 2000 23:40:50 +0900 > Below is example code for Mutex and module Synchronized (using > test_and_set), using test_and_set, so that you can do: > > class MySynchedClass > include Synchronized > def my_synched_method > ... > end > synchronized :my_synched_method > end > It's only on the object level though. Finer granularity might be needed... > > I think it correctly handles Dave's RingBuffer example but I'm not > sure. Can someone verify? > > class Mutex