diff --git a/prelude.rb b/prelude.rb index be249af751..b1e477a3ea 100644 --- a/prelude.rb +++ b/prelude.rb @@ -1,18 +1,3 @@ -class << Thread - # call-seq: - # Thread.exclusive { block } -> obj - # - # Wraps the block in a single, VM-global Mutex.synchronize, returning the - # value of the block. A thread executing inside the exclusive section will - # only block other threads which also use the Thread.exclusive mechanism. - def exclusive(&block) end if false - mutex = Mutex.new # :nodoc: - define_method(:exclusive) do |&block| - warn "Thread.exclusive is deprecated, use Thread::Mutex", uplevel: 1 - mutex.synchronize(&block) - end -end - class Binding # :nodoc: def irb diff --git a/spec/ruby/core/thread/exclusive_spec.rb b/spec/ruby/core/thread/exclusive_spec.rb index ca8f105da4..8c2bc0e82a 100644 --- a/spec/ruby/core/thread/exclusive_spec.rb +++ b/spec/ruby/core/thread/exclusive_spec.rb @@ -1,47 +1,49 @@ require_relative '../../spec_helper' -describe "Thread.exclusive" do - before :each do - ScratchPad.clear - $VERBOSE, @verbose = nil, $VERBOSE - end +ruby_version_is ''...'2.8' do + describe "Thread.exclusive" do + before :each do + ScratchPad.clear + $VERBOSE, @verbose = nil, $VERBOSE + end - after :each do - $VERBOSE = @verbose - end + after :each do + $VERBOSE = @verbose + end - it "yields to the block" do - Thread.exclusive { ScratchPad.record true } - ScratchPad.recorded.should == true - end + it "yields to the block" do + Thread.exclusive { ScratchPad.record true } + ScratchPad.recorded.should == true + end - it "returns the result of yielding" do - Thread.exclusive { :result }.should == :result - end + it "returns the result of yielding" do + Thread.exclusive { :result }.should == :result + end - it "blocks the caller if another thread is also in an exclusive block" do - m = Mutex.new - q1 = Queue.new - q2 = Queue.new + it "blocks the caller if another thread is also in an exclusive block" do + m = Mutex.new + q1 = Queue.new + q2 = Queue.new - t = Thread.new { - Thread.exclusive { - q1.push :ready - q2.pop + t = Thread.new { + Thread.exclusive { + q1.push :ready + q2.pop + } } - } - q1.pop.should == :ready + q1.pop.should == :ready - -> { Thread.exclusive { } }.should block_caller + -> { Thread.exclusive { } }.should block_caller - q2.push :done - t.join - end + q2.push :done + t.join + end - it "is not recursive" do - Thread.exclusive do - -> { Thread.exclusive { } }.should raise_error(ThreadError) + it "is not recursive" do + Thread.exclusive do + -> { Thread.exclusive { } }.should raise_error(ThreadError) + end end end end