|
안녕하세요
기존에 개발되어 사용하던 32bit프로그램을 64bit으로 변환하는 과정에서 발견 된 현상있어 문의 드립니다.
현제 개발IDE는 Rad XE3 Update2를 사용하고 있습니다.
멀티스레드에서 로컬파일 DB접근이 동시에 이루어 질 수 있는 부분 있어
Critical Section을 이용하여 동시접근을 제한하여 사용해 왔었습니다.
각 스레드에서 Critical Section 진입 및 해지(Enter, Leave)가 짝이 맞게 되어 있어
정상적으로 각 스레드에서 접근하여 읽기 쓰기 작업이 이루어 지며,
windows 32bit환경으로 빌드하여 프로그램 사용시 정상동작을 확인했습니다.
하지만, 동일 프로그램을 windows 64bit환경으로 변경하고, 빌드하여 사용시 문제가 있었습니다.
한 쓰레드에서 CriticalSection 진입(EnterCriticalSection)후 나오더라도(LeaveCriticalSection)
다른 쓰레드에서 CriticalSection 진입시 Block되어 대기하고 있는 현상이 발생되고 있습니다.(Logging으로 문제점을 찾음)
테스트로 MS 비쥬얼스튜디오로 멀티스레드에서 CriticalSection사용하는 64bit 프로그램을 간단히
만들어 테스트 해보았지만, 해당 증상이 발견되고 있지는 않고 있습니다.
이러한 문제가 RadStudio의 C++ builder가 64bit으로 오면서 컴파일러가 LLVM Clang기반으로 추가된 것(바뀐 것?)으로 알고 있습니다.
이와 관련해서 생긴현상 인지도 모르겠다는 가설로, 일단 LLVM Clang에서 관련자료를 찾는 중입니다.
한 줄 요약
-> '64bit에서는 LLVM Clang을 이용한 컴파일러로 인해 LeaveCriticalSection 명령이 않먹는거 같다'입니다.
혹시 관련 내용을 알고 계신분이 있으시다면 조언 부탁드립니다.
|