2010-04-13 6 views
0

MFC 응용 프로그램 용 DLL을 개발하고 일부 동기화 메커니즘이있는이 DLL에 싱글 톤 클래스가 있다고 가정합니다. 그리고이 DLL은 다른 프로세스, 즉 EXE에서 사용됩니다. 질문 :이 공유는 모든 공유 프로세스에 대해 단 한 번만 생성되었거나 모든 프로세스에 자체 싱글 톤이 있습니까?공유 DLL에 여러 개의 싱글 톤 인스턴스가 있습니까?

그리고이 여러 싱글 톤 문제를 어떻게 해결할 수 있습니까?

+0

하나의 가능한 아이디어 : http://stackoverflow.com/questions/783623/boost-shared-memory-and-vectors –

답변

2

나는 Windows에 대해 이야기하고 있다고 가정합니다. 이 경우 모든 프로세스에는 자체 싱글 톤이 있습니다. 공유 메모리에 배치하고 명명 된 동기화 프리미티브를 사용하여 프로세스간에 싱글 톤을 공유 할 수 있습니다.

0

싱글 톤 패턴을 기반으로한다면 프로세스 당 하나의 싱글 톤이됩니다. 해당 프로세스 내에서 여러 스레드를 실행하는 경우 여전히 하나의 싱글 톤만 존재합니다.

0

다릅니다. 기본적으로 DLL의 모든 데이터는 공유되지 않으며 모든 코드가 공유됩니다. 그러나 #pragma section ("SharedSingleton", read, write, shared)을 사용하면 "SharedSingleton"이라는 데이터 섹션을 만들 수 있습니다.이 섹션은 DLL의 모든 사용자에게 공유됩니다.

이 보안 위험을 초래한다는 점에 유의하십시오. 발생할 수있는 또 다른 문제는 싱글 톤의 초기화입니다. C++은 공유 섹션의 개념을 실제로 이해하지 못합니다.