Share via


Threadingunterschiede zwischen Direct3D-Versionen

Viele Multithread-Programmiermodelle verwenden Synchronisierungsgrundsätze (z. B. Mutexe), um kritische Abschnitte zu erstellen und zu verhindern, dass mehr als ein Thread gleichzeitig auf Code zugreift.

Die Methoden zur Ressourcenerstellung der ID3D11Device-Schnittstelle wurden jedoch so konzipiert, dass sie erneut verwendet werden, ohne dass Synchronisierungsgrundsätze und kritische Abschnitte erforderlich sind. Daher sind die Methoden zur Ressourcenerstellung effizient und einfach zu verwenden.

Unterschiede zwischen Direct3D 11, 10 und 9:
Direct3D 11 ist standardmäßig größtenteils threadsicher und ermöglicht es Anwendungen weiterhin, sich mit D3D11_CREATE_DEVICE_SINGLETHREADED abzumelden. Wenn Anwendungen die Threadsicherheit ablehnen, müssen sie die Threadingregeln einhalten. Die Runtime synchronisiert Threads im Namen der Anwendung, sodass gleichzeitige Threads ausgeführt werden können. Tatsächlich ist die Synchronisierung in Direct3D 11 effizienter als die Verwendung der threadsicheren Schicht in Direct3D 10.
Direct3D 10 kann die Ausführung von jeweils nur einem Thread unterstützen. Direct3D 10 ist vollständig threadsicher und ermöglicht es einer Anwendung, dieses Verhalten mit D3D10_CREATE_DEVICE_SINGLE_THREADED zu deaktivieren.
Direct3D 9 ist nicht standardmäßig threadsicher. Wenn Sie jedoch CreateDevice oder CreateDeviceEx aufrufen, um ein Gerät zu erstellen, können Sie das D3DCREATE_MULTITHREADED-Flag angeben, um den Direct3D 9-API-Thread sicher zu machen. Dies verursacht einen erheblichen Synchronisierungsaufwand. Daher wird davon abgeraten, den Direct3D 9-API-Thread sicher zu machen, da die Leistung beeinträchtigt werden kann.

Multithreading