1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
require 'rspec'
describe 'Accessing instance variables' do
it 'should not lose concurrent writes under growth operations' do
lost_writes = false
(0..1000).each do |i|
clazz = Class.new
object = clazz.new
mutate = true
# probing thread
t1 = Thread.new do
(0..10000).each do |i|
object.instance_variable_set(:@foo, i)
lost_writes = true if object.instance_variable_get(:@foo) != i
end
end
# mutating thread
t2 = Thread.new{(0..10000).each{break unless mutate;object.instance_variable_set(:"@bar_#{rand(100000)}",1)}}
t1.join
mutate = false
t2.join
break if lost_writes
end
lost_writes.should be_false
end
end
|