2012-03-19 2 views
3

아직 스레드 안전하지 않은 소스 코드가있는 DLL이 있습니다. dll은 매우 복잡하며 thread를 안전하게 만드는 데 꽤 오랜 시간이 걸릴 것입니다. 그래서 나는 Dll의 여러 "사본"을 독립적으로 실행하는 아이디어를 생각해 냈습니다. 가장 쉬운 방법은 아마도 N 개의 이름이 바뀐 Dll 복사본을 만들고 스레드 당 하나의 별도 Dll을로드하는 것입니다.스레드 안전하지 않은 DLL의 여러 '인스턴스'를 실행 하시겠습니까?

가능한 해결책이 있습니까? 더 나은 방법이 있습니까? 래퍼 코드가있을 수 있습니까?

나는 이것이 전혀 좋은 엔지니어링 솔루션이 아니라는 것을 알고 있습니다. 제발 나를 비난하지 마세요. 그러나 그것은 많은 문제를 해결할 수 있습니다.

EDIT 2017

나는이 일을했는데 그것은 문제없이 작동합니다. 큰! 는하지만 다음과 같은주의 사항 :

http://msdn.microsoft.com/en-us/library/2s9wt68x%28v=vs.80%29.aspx

을 DLL을 동적으로로드 된 경우, 그것은 보호 오류가 발생할 수 __declspec (스레드)로 모든 로컬이 아닌 데이터 또는 객체를 선언합니다.

답변

2

그 해결책은 완벽하게 가능하며 내 견해로는 스레드로부터 안전하지 않은 전역 상태를 가진 DLL을 처리 할 수있는 유일한 방법입니다. 그것은 꽤 아니지만 작동합니다.

1

JPG 압축/압축 해제 용 Intel JPG 라이브러리 (단일 스레드 DLL)를 사용하는 일부 프로젝트에서는이 작업을 수행합니다. 문제의 DLL이 많은 메모리를 할당하거나 많은 리소스를 사용하는 경우 응용 프로그램의 전체 메모리 사용량이 잠재적으로 증가하므로 이상적인 솔루션은 아니라고 말하지만이 메서드는 정상적으로 작동합니다.

관련 문제