2011-08-03 8 views
0

https://developer.mozilla.org/En/Gecko_Plugin_API_Reference:Scripting_pluginsから:NPAPIスレッドモデル:グローバル変数へのアクセスはロックによって保護されるべきですか?

このAPIは、スレッドセーフであるように設計されていません。このAPIのスレッドモデルは、このAPIを介したすべての呼び出しが同期的で、プラグインからこのAPIのメソッドへの呼び出しが、プラグインが開始されたスレッドから来ていなければならず、同様に、同じスレッドから来ることが保証されています。このAPIの将来の改訂は、あるスレッドから別のスレッドへの呼び出しをプロキシするメカニズムを提供し、このAPIを他のスレッドから使​​用する際に役立ちます。

私が(たとえ別のページに、すべてのインスタンス間で共有)私のプラグインでグローバル変数にアクセスしたい場合、私はそれをロックする必要があるか、またはブラウザがすべてのためのプラグインとの通信に一つだけのスレッドを使用しませんインスタンス?

答えて

1

ブラウザは常に、すべてのインスタンスのプラグインと通信するために正確に1つのスレッドを使用します。代わりに同じことをして、メインスレッド以外のNPN_関数を呼び出さないでください。

メインスレッドをすべてブロックする可能性がある場合は、に独自のスレッドを作成したい場合は、ロックが必要な場合があります。しかし、単にブラウザのために?いいえ、あなたはそれらを必要としません。

+0

OK。ブロックについては、I/OにNPN_Get/PostURLを使用すると、ブラウザは同じスレッドでNPP_NewStream/WriteReady/Write/DestroyStreamを呼び出しますか? NPP_Writeは、ブラウザにデータがあるときにのみ呼び出されるため、I/Oはメインスレッドをブロックすべきではありません。 – lmz

+0

ブラウザは常に、すべてのインスタンスのプラグインと通信するために正確に1つのスレッドを使用します。代わりに同じことをして、メインスレッド以外のNPN_関数を呼び出さないでください。 – taxilian

+0

そして、ブラウザがデータを持っているときだけNPP_Writeが呼び出されるため、I/Oはメインスレッドをブロックしません。つまり、メインスレッドを処理するときにメインスレッドをブロックしない限りです。 FireBreath(http://www.firebreath.org)のソースコードをチェックアウトする方法の例がさらに必要な場合は、 – taxilian

関連する問題