Мы тестируем взаимодействие потоков для нашего встроенного рубина. У нас есть расширение C ruby, в котором реализованы следующие методы
1. longRunningMethod()
2. shortRunningMethod().
Вот код для проверки взаимодействия потоков
// файл
test.rb
require 'mymodule'
$a = 0;
obj = MyModule::MyClass.new
t1 = Thread.new{$a = obj.veryLongRunningOperation(); puts "doneLong"}
sleep 1
$a = obj.shortOperation()
puts "doneShort"
t1.join
Мы убедились, что longRunningMethod занимает более 1 секунды (5 секунд) для выполнения, используя вложенные циклы for
Согласно нашему пониманию, сначала следует завершить shortRunningMethod, а затем longRunningMethod.
Однако мы наблюдали это только тогда, когда у нас не было команды сна.
Но когда мы ввели выражение «сон 1». Сначала выполняется longRunningMethod, а затем shortRunningMethod
Кто-нибудь даст нам указание на то, почему оператор сна дает такой результат?
[Мы используем ruby 1.8.6] Заранее спасибо.