Различия в потоках между версиями Direct3D
Многие многопотоковые модели программирования используют примитивы синхронизации (например, мьютексы) для создания критически важных разделов и предотвращения одновременного доступа к коду несколькими потоками.
Однако методы создания ресурсов интерфейса ID3D11Device были разработаны для повторного входа без примитивов синхронизации и критических разделов. В результате методы создания ресурсов являются эффективными и простыми в использовании.
Различия между Direct3D 11, 10 и 9: Direct3D 11 по умолчанию в основном является потокобезопасной и по-прежнему позволяет приложениям отказаться от использования D3D11_CREATE_DEVICE_SINGLETHREADED. Если приложения отказались от потоковой безопасности, они должны соответствовать правилам потоков. Среда выполнения синхронизирует потоки от имени приложения, позволяя выполнять параллельные потоки. На самом деле синхронизация в Direct3D 11 более эффективна, чем использование потокобезопасного уровня в Direct3D 10. Direct3D 10 может поддерживать выполнение только одного потока за раз. Direct3D 10 является полностью потокобезопасным и позволяет приложению отказаться от этого поведения с помощью D3D10_CREATE_DEVICE_SINGLE_THREADED. Direct3D 9 по умолчанию не является потокобезопасной. Однако при вызове CreateDevice или CreateDeviceEx для создания устройства можно указать флаг D3DCREATE_MULTITHREADED, чтобы сделать API Direct3D 9 потокобезопасным. Это приводит к значительным затратам на синхронизацию. Поэтому не рекомендуется делать потокобезопасность API Direct3D 9, так как производительность может снизиться. |