멀티 프로세서에 관한 질문
글쓴이: mastercho / 작성시간: 목, 2003/07/10 - 4:56오후
제가 만든 클래스의 내부 동기화를 위해 멤버 변수를 뮤텍스 자동변수[일반 변수]로 선언하고 사용하는데
어떤분이
다중 프로세스에서는 여러 CPU가 동시에 프로세스의 쓰레드들에 접근해 돌아갈수 있기때문
어떤분은 뮤텍스 변수를 volatile[키워드] 로 쓰라고 하시더군요
물론 뮤텍스 자동변수가 한 CPU레지스터 안에서 돌때는, 다른 CPU가 자동 변수 뮤텍스에 접근하게 될때 메모리에 두고 변수를 수정한게 아니기때문에
제대로 상호배제가 안될수도 있을거 같긴하지만
제프리 리처[윈도우의 대가] 윈도우 NT급에서 프로세스당 CPU는 하나 이상 할당 되지 않는 방식으로 구동된다고 본거 같거든요
따라서 저런문제가 발생하지 않을듯 싶고
물론 윈도우NT가 아닌 운영체제에서는 문제가 될수도 있겠고 해서
헷갈리는데요
다중 프로세서의 CPU 스케줄링 정책을 명확히 아시는분이나
이경우에서의 volatile 키워드 사용에 대해 아시는분은 답변 좀 부탁드립니다
Forums:
int a;volatile int b;이 두가지의 차이점은 최
int a;
volatile int b;
이 두가지의 차이점은 최적화 옵션 0일때는 나타나지 않습니다.
하지만 최적화 옵션이 높아지면 높아질수록 이것은 상반된 영역을 사용할수
있습니다.
volatile은 이러한 최적화 옵션을 무시하라고 권고하는 겁니다.
즉, 최적화 0인것과 같이 행동해달라고 요청하는거죠.
여기서 a변수의 경우는 경우에 따라서 메모리에 곧바로 적용되지 못하고
Register안에서만 노는 경우가 충분히 생길수 있습니다.
반면에 b의 경우는 최적화에 의해서 레지스터를 경유하지 못하도록
최대한 컴파일러가 회피를 하도록 컴파일 정책이 적용됩니다.
하지만 최적화 옵션 몇 이상부터는 이것또한 무시될수 있다고
그러더군요. 저도 이건 확인 안해본 사항이니까 따로 확인해보세요.
댓글 달기