2012-08-28 12 views
7

私は主なスレッドではないスレッド内で、C++からv8を使用しようとしています。 v8に関する限り、マルチスレッド化はありません。すべてのv8オブジェクトが作成され、そのスレッド内で破棄されます。何も並行して実行されておらず、何も共有されていません。メインスレッドからプログラムを実行すると、すべて正常に動作します。私は別のスレッドでv8のものを持っているとき、私はv8 :: HandleScopeを作成するときにセグメント化の失敗を取得します。スレッドでv8を使用するにはどうすればよいですか?

スレッドが実際にv8でどのように処理されているかに関する有用な文書は見つかりません。検索の際に「分離とロッカーの使用」という指示が頻繁に表示されますが、これがどのように行われたかの例は見つかりません。 v8 :: Isolateに関するこのAPIドキュメントがありますが、私の特定のケースでそれらが必要かどうかは私には分かりません(私はメモリを共有していないか、パラレルで実行しています)。 v8 :: Locker()のドキュメントには、クラスの内容に関する情報さえありません。プロジェクトに含まれているサンプルは、このいずれも処理しません。

だから私の質問は...

  • ですが、私はここの分離株および/またはロッカーを使用する必要がありますか?
  • 私はそれらを使用する方法の最小の例を得ることができますか?擬似コードでさえ、何かが本当に役に立ちます。

答えて

2

HandleScopeを呼び出すときにコンテキストで動作するメソッドにV8 :: Lockerが必要です。 https://github.com/jasondelponte/go-v8/blob/master/src/v8context.cc#L41は、私がv8でロッカーを使用した方法の例です。この例では、複数のスレッドで使用されていますが、このルールは単一スレッドにも適用されます。

v8の複数のインスタンスを並列にする必要がある場合にのみ分離が必要です。

https://groups.google.com/forum/?fromgroups=#!topic/v8-users/FXpeTYuAqKI HandleScopeローカル変数が作成されるとすぐにライブラリがクラッシュする問題を解決するのに役立つ古いスレッドです。

関連する問題