次の方法で共有


Direct3D バージョン間のスレッドの違い

多くのマルチスレッド プログラミング モデルでは、同期プリミティブ (ミューテックスなど) を使用して重要なセクションを作成し、一度に複数のスレッドからコードにアクセスできないようにします。

ただし、ID3D11Device インターフェイスのリソース作成方法は、同期プリミティブと重要なセクションを必要とせずに再入可能にするように設計されていました。 その結果、リソースの作成方法は効率的で使いやすいです。

Direct3D 11、10、9 の違い:
Direct3D 11 の既定では、ほとんどの場合、スレッド セーフであり、D3D11_CREATE_DEVICE_SINGLETHREADEDを使用してアプリケーションをオプトアウトすることが引き続き許可されます。 アプリケーションがスレッド セーフであることをオプトアウトする場合は、スレッド規則に従う必要があります。 ランタイムは、同時実行スレッドの実行を許可するアプリケーションの代わりにスレッドを同期します。 実際、Direct3D 11 の同期は、Direct3D 10 でスレッド セーフレイヤーを使用するよりも効率的です。
Direct3D 10 では、一度に 1 つのスレッドの実行のみをサポートできます。 Direct3D 10 は完全にスレッド セーフであり、アプリケーションはD3D10_CREATE_DEVICE_SINGLE_THREADEDを使用してその動作をオプトアウトできます。
Direct3D 9 では、既定ではスレッド セーフではありません。 ただし、CreateDevice呼び出すか、CreateDeviceExしてデバイスを作成する場合は、D3DCREATE_MULTITHREADED フラグを指定して Direct3D 9 API スレッドを安全にすることができます。 これにより、大幅な同期オーバーヘッドが発生します。 そのため、パフォーマンスが低下する可能性があるため、Direct3D 9 API のスレッド セーフ化はお勧めしません。

マルチスレッド