代码之家  ›  专栏  ›  技术社区  ›  Andrew Grimm atk

为什么我在线程中不能访问一些库类?

  •  0
  • Andrew Grimm atk  · 技术社区  · 15 年前

    为什么要这样做

    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 回复  |  直到 15 年前
        1
  •  1
  •   Andrew Grimm atk    15 年前

    biorubi库(或者至少是它的一些版本)使用autoload。自动加载不是线程安全的(至少在Ruby1.8中是如此),因此如果两个线程同时访问bio::Alignment,则可能会出错。