Четыре цикла по 10 миллионов раз каждый.В каждом цикле они нажимают число, если список пуст, иначе они извлекают число из списка.
list = []
threads = []
4.times do |i|
threads << Thread.new do
1e7.to_i.times do |i|
if list.empty?
list << i
else
list.pop
end
end
end
end
threads.each(&:join)
p list
Поскольку цикл выполняется четное число раз, я ожидаю, что список будет пустым после всехпотоки выполняются.
Однако иногда список содержит номер 9999999.
Я думал, что массив в MRI Ruby является потокобезопасным из-за GIL.
КакРасовые условия бывают несмотря на GIL?