Udostępnij za pośrednictwem


Różnice wątkowe między wersjami Direct3D

Wiele wielowątowych modeli programowania korzysta z elementów pierwotnych synchronizacji (takich jak mutexes), aby tworzyć sekcje krytyczne i zapobiegać uzyskiwaniu dostępu do kodu przez więcej niż jeden wątek jednocześnie.

Jednak metody tworzenia zasobów interfejsu ID3D11Device zostały zaprojektowane jako reentrantne, bez konieczności korzystania z prymitywów synchronizacji oraz sekcji krytycznych. W rezultacie metody tworzenia zasobów są wydajne i łatwe w użyciu.

Różnice między direct3D 11, 10 i 9:
Direct3D 11 domyślnie działa w trybie przeważnie bezpiecznym dla wątków i nadal umożliwia aplikacjom wyłączenie tego trybu za pomocą D3D11_CREATE_DEVICE_SINGLETHREADED. Jeśli aplikacje zrezygnują z bezpieczeństwa wątkowego, muszą przestrzegać zasad dotyczących wątków. Środowisko uruchomieniowe synchronizuje wątki w imieniu aplikacji, co umożliwia uruchamianie współbieżnych wątków. W rzeczywistości synchronizacja w Direct3D 11 jest bardziej wydajna niż użycie warstwy zapewniającej bezpieczeństwo wątkowe w Direct3D 10.
Funkcja Direct3D 10 może obsługiwać wykonywanie tylko jednego wątku jednocześnie. Direct3D 10 jest w pełni bezpieczny wątkowo i umożliwia aplikacji rezygnację z tego zachowania przy użyciu D3D10_CREATE_DEVICE_SINGLE_THREADED.
Direct3D 9 nie jest domyślnie bezpieczny dla wątków. Jednak podczas wywoływania CreateDevice lub CreateDeviceEx w celu utworzenia urządzenia można określić flagę D3DCREATE_MULTITHREADED, aby zapewnić bezpieczeństwo wątku interfejsu API Direct3D 9. Powoduje to znaczne obciążenie związane z synchronizacją. Z tego powodu zapewnianie bezpieczeństwa wątków w interfejsie API Direct3D 9 nie jest zalecane, ponieważ może to obniżyć wydajność.

wielowątkowość