2011-05-13 2 views
3
 
Lib1[dll] 
{ 
class A 
{ 
static int i=0; 
} 
} 

Program1[exe] have reference to Lib1 
{ 
Class B 
{ 
    main() 
    { 
     A.i = 5; 
    } 
} 
} 

Program2 [exe] have reference to Lib1 
{ 
Class C 
{ 
    main() 
    { 
     A.i = 5; 
    } 
} 
} 

Program1과 Program2가 동시에 실행되는 경우, Lib1의 단일 인스턴스를 참조하고 Program1의 Ai 정적 변수에 대한 변경 사항을 Program2에서 사용할 수 있습니까? 및 viceversa,다중 프로세스에서 dll의 같은 ​​인스턴스로드하기

+0

운영 체제는 무엇입니까? – dthorpe

답변

8

일반적으로 아니오, 당신이 요구하는 것은 불가능하거나 권장되지 않습니다. 대부분의 운영 체제 (Windows, Linux 등)에서 각 프로그램 인스턴스는 다른 모든 프로세스와 분리 된 별도의 프로세스 주소 공간에서 실행됩니다. 경우에 따라 공유 DLL의 읽기 전용 실행 코드가 전체 메모리 소비를 줄이기 위해 프로세스간에 공유 될 수 있지만 쓰기 가능한 데이터는 각 프로세스에 대해 로컬입니다.

OS 서비스를 사용하여 여러 프로세스가 액세스 할 수있는 공유 메모리 영역을 명시 적으로 설정함으로써 원하는 것을 얻을 수 있습니다. Windows에서는 모든 참가자가 미리 알고있는 이름을 사용하여 named shared memory objects을 작성하면됩니다. 그런 다음 해당 메모리 블록을 구조체 유형에 유형 변환하고 해당 메모리 영역의 필드를 읽고 쓸 수 있으며 해당 공유 메모리에 대한보기가있는 모든 프로세스는 동일한 데이터를 볼 수 있습니다.

여러 프로세스가 동시에 실행 중이므로 공유 메모리 영역의 데이터가 어떻게 업데이트되는지 생각해야합니다. 여러 프로세스가 카운터 필드 또는 공유 메모리 영역의 그 밖의 요소를 업데이트해야하는 경우 연동 증가 또는 독점적 액세스 잠금으로 명명 된 뮤텍스 개체 사용과 같은 해당 데이터의 읽기 및 쓰기에 대한 스레드 안전 실행을 구현해야합니다.

관련 문제