スレッドにいるときにライブラリクラスにアクセスできないのはなぜですか?

StackOverflow https://stackoverflow.com/questions/2100701

  •  21-09-2019
  •  | 
  •  

質問

なぜ次のものがありますか

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
役に立ちましたか?

解決

Biorubyライブラリ(または少なくとも一部のバージョン)は、AutoLoadを使用しています。 Autoloadはスレッドセーフではない(少なくともRuby 1.8では)。したがって、2つのスレッドがBio :: Alignmentに同時にアクセスしている場合、エラーが発生する可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top