DLL 내에 전역변수 aaa 라는 것을 선언했습니다..
DLL 호출하는 쪽에서 2~3개의 쓰레드가 동시에 실행되어 DLL 를 호출해서 사용할때
DLL 내의 전역변수 aaa 각 쓰레드에 의해 간섭이 발생할 수 있는가요?
DLL 에서 호출하는 쪽에서는 STATIC 하게 DLL을 load 합니다..
그리고, DLL 내의 함수를 호출하게 되면 전역변수 aaa 라는 값은 초기화, 값 저장 등의
변수값 변화가 발생합니다..
DLL 를 개발해서 업체에 제공을 했는데, 업체의 프로그램은 쓰레드 방식으로 저희 DLL를 호출한다고 합니다..
그런데, 쓰레드가 여러개 실행되어 작업을 돌때 전역변수 값이 예상하지 못하는 값으로 리턴이 되어 질문을 드리게 되었습니다..
안녕하세요..
아래와 같이 설명되어 지구 있습니다..
◇ DLL에서의 전역변수
DLL에서 선언된 전역변수는 단지 DLL안에서만 인식된다. DLL은 자신을 호출하는
모듈의 변수를 읽을 수도 없고, 자신의 변수를 export하여 다른 모듈에서 읽도록
할 수도 없다. DLL에서 가능한 인터페이스는 procedure나 function 뿐이기 때문
이다. 따라서 상호간의 변수값 참조는 function이나 procedure의 인자, 반환값등
에 의존할 수밖에 없다. 또 하나 주의해야 할 것은 DLL 자체는 메모리상에 하나
만 유지되지만, 그 Instance는 각각의 전역변수 테이블을 가진다. 다시말해 두
어플리케이션이 동시에 하나의 DLL을 억세스할 때도 전역변수는 각각에 따라 개
별로 구성된다. 메모리의 공유를 위해서는 Windows API중 Memory Mapped File을
이용해야 한다.