2012-01-12 10 views
0

に奇妙なことをやって:ルビーThread.newは、私がコードの一部を持っているクラスのコール

config_item_relation = self.superclass::Relation.new 
config_item_threads = [] 
config_items.each do |ci| 
    #config_item_threads << Thread.new do 
    config_item_relation << Tracker::ConfigItem.object_preprocessor(ci.first) 
    #end 
end 

もちろん、別のスレッドでは実行しませんが、コードは正常に実行されます。 エラーの参照先のファイルが実際にTracker :: ConfigItemを定義しています。 class Tracker::ConfigItem < OTRS::ConfigItem 私はここでスレッドを使用するまで、何の問題もなく多くの場所を多く使用しています。 私は完全に正常に動作同じコードチャンクで異なるが、非常に類似したクラス(同じ継承)に対して同じスレッドの使用を持っている:

ticket_threads = [] 
if tickets 
    ticket_relation = self.superclass::Relation.new 
    tickets.each do |t| 
    ticket_threads << Thread.new do 
     ticket_relation << Tracker::Ticket.object_preprocessor(t) 
    end 
    end 
end 

は、私はこれらのスレッドで何かが足りないのですか?

答えて

0

この時点でTracker::ConfigItemがロードされていないように見えるので、複数のスレッドが同じファイルを読み込もうとします。

現在のバージョンのRubyでは非常にスレッドが危険で、さまざまな競合状態が発生する可能性があります。あなたが必要とは、あなたの子スレッドが

をそれを戦うのではなく、メインスレッド上で起こることを確信しているように、私は上記の

require_dependency 'tracker/config_item' 

ファイルを貼り付けたいです

関連する問題