1
0
Fork 0
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:
卜部昌平 2020-07-28 10:58:37 +09:00 committed by Kazuhiro NISHIYAMA
parent eb9342d348
commit b674fc9ca2
No known key found for this signature in database
GPG key ID: 262ED8DBB4222F7A
2 changed files with 34 additions and 47 deletions

View file

@ -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

View file

@ -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