2010-01-20 2 views
0

Почему следующиеПочему я не могу получить доступ к некоторым библиотечным классам, когда я в потоке?

require "bio" 

threads = (1..2).map do 
    Thread.new do 
    seqs = ["gattaca"] * 5 
    alignment = Bio::Alignment.new(seqs) 
    end 
end 

threads.each {|th| th.join} ; nil 

дают это сообщение об ошибке?

NameError: uninitialized constant Bio::Alignment 
    from (irb):6 
    from (irb):10:in `join' 
    from (irb):10 
    from (irb):10:in `each' 
    from (irb):10 

ответ

1

Библиотека биоробов (или, по крайней мере, некоторые ее версии) использует автозагрузку. Autoload не является потокобезопасным (по крайней мере, в ruby ​​1.8), поэтому, если два потока одновременно получают доступ к Bio :: Alignment, вы можете иметь ошибки.