다음을 통해 공유


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디바이스를 만들 때 Direct3D 9 API 스레드를 안전하게 만드는 D3DCREATE_MULTITHREADED 플래그를 지정할 수 있습니다. 이로 인해 상당한 동기화 오버헤드가 발생합니다. 따라서 성능이 저하될 수 있으므로 Direct3D 9 API 스레드를 안전하게 만드는 것은 권장되지 않습니다.

멀티스레딩