外部プラグインのマルチスレッド動作に関する注意事項
KLARA 自体はマルチスレッド動作を考慮して作成されています。
しかしながら、KLARAが利用している、KLARAの外部にあるSUSIEプラグインには、
マルチスレッド動作に対する動作保証が一切ありません。
このため、外部プラグインを使用しているときには、そのマルチスレッド動作が大きく制限されます。
外部プラグインの動作制限
マルチスレッド動作の保証の無い外部プラグインを使用する場合には、以下の制限があります。
- 一つのプラグインに同時にアクセスできるのは、ただ1つのスレッドのみである
- 複数のスレッドが同時にあるプラグインに要求を出した場合、1つずつ順番に処理が行われるため、1つのスレッドがそのプラグインを使用している間は、他のスレッドはそのスレッドの処理が終了するまで待機させられます。
- このような状況は、例えばスライドショーを多重起動しているときなどに発生しやすくなります。
- マルチスレッド動作を考慮したプラグインをロードできる数には制限がある
- Win32 の仕様により、TLS(ThreadLocalStorage)は64個までしか使用できません。
- このため、TLS を独自に使用するプラグインを多数ロードした場合、TLSが不足する可能性があります。TLS が不足した場合、アプリケーションの動作に障害が発生するかもしれません。
- ただし、この問題点は実際には未確認で、TLSを使用しているプラグインは非常に少数ですが、原理的にはあり得ると思います。
- すべての外部プラグインはマルチスレッド非対応として認識される
- 仮に外部プラグインがマルチスレッド対応であったとしても、外部プラグインがマルチスレッド対応かどうかを判断する方法がありません。
- このため、マルチスレッド動作に対応したプラグインであっても、マルチスレッド非対応プラグインとして扱われます。
内蔵プラグインのマルチスレッド動作
KLARA に内蔵されているプラグインは、マルチスレッド動作を前提に設計されています。
このため、ほとんど制限がありません。
- JPEG/TIFF プラグイン
- GetPicture() のみ、スレッドにつき1回しか呼び出せません。これは、同一のスレッドからの多重呼び出しが出来ないことを意味しています。しかし、このような場合はほとんど発生しないはずです。
- これ以外の API については一切の制限はありません。
- BMP/GIF プラグイン
- 一切制限はありません。
- 複数のスレッドから同時にどのような呼び出し方をされても構いません。
- 参照
-