HEX
Server: Apache
System: Linux s198.coreserver.jp 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC 2025 x86_64
User: nagasaki (10062)
PHP: 7.1.33
Disabled: NONE
Upload Files
File: //usr/local/rvm/src/ruby-2.6.8/spec/ruby/core/thread/exclusive_spec.rb
require_relative '../../spec_helper'

describe "Thread.exclusive" do
  before :each do
    ScratchPad.clear
  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 "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
      }
    }

    q1.pop.should == :ready

    lambda { Thread.exclusive { } }.should block_caller

    q2.push :done
    t.join
  end

  it "is not recursive" do
    Thread.exclusive do
      lambda { Thread.exclusive { } }.should raise_error(ThreadError)
    end
  end
end