How absurd is this?

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.

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

martin

+1

That's perfect. And obvious. :slight_smile: 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