| [ CnUnix ] in KIDS 글 쓴 이(By): terzeron (microkid) 날 짜 (Date): 2002년 9월 9일 월요일 오후 06시 17분 31초 제 목(Title): Re: [Q] thread와 volatile 원래 volatile은 "레지스터를 믿지 말고 메모리에서 다시 읽어오라"는 뜻을 가진 modifier입니다. ANSI C의 권고안도 그러하고 GCC도 그대로 구현을 했습니다. 주로 longjmp에 의해서 context가 바뀌었다가 roll-back될 때, 레지스터에 있는 값들이 바뀌는데 GCC가 그것을 예측하지 못하고 레지스터에 있는 쓰레기값을 그대로 이용하게 되는 문제점을 막기 위해서 사용되는 것이죠. multi-threaded program에서는 volatile modifier의 사용이 필요할 수도 있습니다. 어떤 변수에 여러 쓰레드가 동시에 write하려고 하는데, mutual exclusion에 의해 만들어진 critical section 내부가 아니라면 이 변수는 volatile을 이용하여 '다시' 읽어볼 필요가 생기게 됩니다. 이런 경우 사용해야겠죠. (물론 critical section에서 공유되는 변수라면 단 1개의 thread만이 사용하기 때문에 굳이 volatile을 쓸 필요가 없습니다.) volatile을 쓸 것이냐 아니면 mutual exclusion을 이용할 것이냐 필요에 따라 두 가지 중의 하나를 선택해야 합니다. --- 어떤 성취가, 어떤 조롱이, 또는 어떤 고뇌가 나를 기다리고 있을지 나는 모른다. 나는 아무 것도 모른다. 그러나 나는 아직 과거의 경이로운 기적의 시대가 영원히 과거의 것이 되어 버리지는 않았다는 사실을 굳게 믿고 있다. - Stanislaw Lem - |