私は、処理を高速化するためにTBB(tbb21_015oss)を使用する関数を公開するPython用のカスタムC++モジュールを用意しています。PythonスレッドでTBB 'parallel_for'を呼び出す
これまでは、Win32環境でPython(2.6.2)からTBB-accelerated関数を呼び出すときに問題はありませんでした。
しかし、(Pythonスレッド(threading.Thread
クラスを使用して作成)からこのような関数を呼び出すときに問題が発生します。メインのPythonスレッドから同じ関数を呼び出しても問題ありません。
次のメッセージで、アプリケーションのクラッシュへの関数のリードを呼び出す:
First-chance exception at 0x03522e96 in python.exe:
0xC0000005: Access violation reading location 0x000000c8.
TBB.dllベースアドレスは0x03510000で、MSVC 2005デバッガーによると、クラッシュがTBBの「parallel_for.hからコードで起こります」、明らかにstatic void start_for::run( const Range& range, const Body& body, const Partitioner& partitioner)
で実行したとき:
start_for& a = *new(task::allocate_root(context)) start_for(range,body,const_cast<Partitioner&>(partitioner));
逆参照されているNULLポインタがありますようです。
FWIW、TBBは、繰延初期化メカニズムを使用して初期化されます:
// at 'global' scope
tbb::task_scheduler_init g_tbbinit(tbb::task_scheduler_init::deferred);
...
// in a function
g_tbbinit.initialize();
は、この作品を作るための方法はありますか?たとえば、TBBは「カスタム」スレッドから呼び出されるためには特定の初期化が必要ですか?
エラーメッセージは何ですか? – log0
@Ugo - 詳細情報を追加するための更新された質問 – rotoglup