IsMultiThread에 대해서 찾아 보니 TThread를 사용하면 기본적으로 설정이 된 상태라고 하는군요.
저는 TThread를 사용하기 때문에 해당 코드는 필요치 않은것 같습니다. 그래도 넣어 볼까요 ㅡ,.ㅡ
TThread관련 코드들은 스레드 생성할 때 Locklist를 해서 동기화 문제는 아닐거라고 생각되는데요.
그래도 제일 의심스러운 부분이 동기화 부분입니다. 링크 걸어주신 부분을 참고해서 찾아봐야 겠습니다.
도움 감사드립니다.
ayh 님이 쓰신 글 :
: 서버 단 개발 하면서 비슷한 경험이 있었습니다만, 결론은 동기화에 제대로 되지 않았기 때문에 벌어졌던 일이었습니다.
:
: 우선은 IsMultiThread 전역변수를 true로 놓지 않으셨으면, 다음 코드를 넣으시는 게 좋을 듯 합니다.
: IsMultiThread := true;
:
: 메모리 관리자 같은 부분에서 thread-safe하게 구동되게 하는 역활이라고 합니다.
:
: 그래도 해결이 안 되신다면 access violation 난 부분을 트래킹하시는 것 외에는 방법이 없을 듯 합니다.
: access violation 에러가 났을 때, 출력되는 번지수를 토대로 코드의 line을 알 수 있는 방법이 팁&트릭 게시판에 있습니다.
:
:
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=600
:
: 제 의견으로는 동기화 부분에서 문제가 있을 듯 합니다.
: 의심스러운 부분의 원자화 여부를 점검해보시는게 좋을 듯 합니다.
:
: 조금이라도 도움이 되기를 바라겠습니다.
:
:
: 허니스탈 님이 쓰신 글 :
: : 안녕하세요.
: :
: : 항상 이곳에서 검색으로 많은 도움을 받아왔다가 검색해도 나오지 않아
: :
: : 질문을 올려봅니다.
: :
: : 개발환경은 싱글 cpu의 노트북이며 윈도우 xp home을 사용하고 있습니다.
: :
: : 빌더는 6버전이며 사용된 컴퍼넌트는 Apro, Flatstyel, Rxlib, indy9입니다.
: :
: : 실행소스는 데이터를 수집하고 운영자의 명령을 받아 기타 장치들을 제어하는 서버입니다.
: :
: : 문제가 되는것은 노트북에서 디버그 모드로 실행했을 경우 몇날 며칠을 아무런 문제없이 동작했음에도 불구하고
: :
: : 실행환경에 옮기면 억세스 바이얼레이션이 발생한다는 것입니다.
: :
: : 실행환경은 hp서버군이며 한대는 듀얼 cpu 한대는 싱글 cpu입니다. 두 서버모두 제온 cpu를 사용합니다.
: :
: : os는 윈도우 2003 스탠다드 에디션 서비스팩 1이구요.
: :
: : 듀얼 cpu를 가지고 있는 서버는 하이퍼 스레딩 기능을 끄고 물리적인 cpu두개를 사용하고 있으며
: :
: : 싱글 cpu를 가지고 있는 서버는 하이퍼 스레딩 기능을 켜고 논리적인 cpu두개를 사용하고 있습니다.
: :
: : 문제가 되는 서버는 듀얼 cpu를 가지고 있는 서버인데요. 싱글 cpu의 서버는 몇달을 문제없이 잘 돌아가고 있습니다.
: :
: : 그러나 듀얼 cpu를 가지고 있는 서버는 대중없이 억세스 바이얼레이션을 뿜어내는데요 하루가 걸릴 때도 있고 몇분만에
: :
: : 죽어버릴 때도 있고 자기 맘입니다. 실행환경에 빌더를 설치해서 디버그 모드로 돌려보고 싶으나
: :
: : 정부 부처의 서버들이라 설치할 수 없는 상황이구요. 우선 임시방편으로 듀얼 cpu의 서버에서 실행되고 있는
: :
: : 프로세스에 작업관리자에서 선호도 설정을 해서 한개의 cpu로만 돌도록 했는데요. 이렇게 하면 아주 죽지 않는건 아니지만
: :
: : 그래도 한달 넘게 버티기도 하고 그럽니다. 다만 사용자에게 앞으로 이렇게 사용하라고 할 순 없는 노릇이죠.
: :
: : 그래서 여러 방도를 찾아봤으나 제 지식으로는 알아낼 수가 없어 이렇게 질문을 올립니다.
: :
: : 혹시 이와 비슷한 문제를 겪으시고 해결하신 분이 계시면 도움을 부탁드립니다.
: :
: : 그럼 모두 즐거운 주말 맞이하시기 바랍니다.