Imagine you have in a method a block. Sometimes you will want that block to be executed via a mutex.synchronize() call. And sometimes you don't want to synchronize.
def y
yield
end
def method_with_a_block
(dont_lock_here ? method(:y) : @mutex.method(:synchronize)).call do
puts "This block may or may not be synchronized, depending on whether dont_lock_here() returned true or false."
end
end
Is that a stupid way to get that effect?
The only other alternative that occurs to me is to make the block a separate method.
def i_was_a_block
puts "This code may or may not be syncronized, depending on whether dont_lock_here() in method_with_a_block returned true or false."
end
def method_with_a_block
if dont_lock_here
i_was_a_block
else
@mutex.synchronize {i_was_a_block}
end
end
What do you all think?
Kirk Haines
I'd add a Mutex#synchronize_unless
def method_with_a_block
@mutex.synchronize_unless(dont_lock_here()) do
puts "This block may or may not be synchronized, depending on whether
dont_lock_here() returned true or false."
end
end
martin
···
On 8/12/06, khaines@enigo.com <khaines@enigo.com> wrote:
Imagine you have in a method a block. Sometimes you will want that block
to be executed via a mutex.synchronize() call. And sometimes you don't
want to synchronize.
That's perfect. And obvious.
Thanks much for helping me see it.
Kirk Haines
···
On Sat, 12 Aug 2006, Martin DeMello wrote:
On 8/12/06, khaines@enigo.com <khaines@enigo.com> wrote:
Imagine you have in a method a block. Sometimes you will want that block
to be executed via a mutex.synchronize() call. And sometimes you don't
want to synchronize.
I'd add a Mutex#synchronize_unless
def method_with_a_block
@mutex.synchronize_unless(dont_lock_here()) do
puts "This block may or may not be synchronized, depending on whether
dont_lock_here() returned true or false."
end
end