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 のスレッド セーフ化はお勧めしません。 |