mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Thread.exclusive: delete
Has been deprecated since 2069c9e031
.
[Feature #17125][ruby-core:99636]
This commit is contained in:
parent
eb9342d348
commit
b674fc9ca2
2 changed files with 34 additions and 47 deletions
15
prelude.rb
15
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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue