1. 유저 모드 동기화와 커널 모드 동기화의 차이점 그리고 장단점

- 유저 모드 동기화는 단순한 라이브러리 기반의 동기화이다. 따라서 커널 모드로의 전환이 불필요하기 때문에 성능상에 큰 이점이 있다. 다만 그만큼 기능상의 제한도 있다. 반면 커널 모드 동기화는 커널에 의해 이뤄지는 동기화이다. 라이브러리 형태로 제공되는 함수를 호출하지만 실제로 동기화라는 일을 하는 대상은 커널이다. 따라서 유저 모드 동기화에서 제공하지 못하는 기능을 제공받을 수 있다.


2. 임계 영역의 의미

- 임계 영역을 메모리로 오해하는 경우가 있는데 임계 영역은 메모리를 의미하는 것이 아니다. 임계 영역은 둘 이상의 쓰레드가 동시에 실행하면 문제가 발생하는 프로그램상의 코드 영역을 의미하는 것이다.


3. 뮤텍스와 세마포어의 차이점 및 유사점

- 실제로 뮤텍스는 세마포어의 일종이다. 차이가 있다면 세마포어는 카운트를 지닐 수 있다는 것이다. 카운트를 지닐 수 있다는 것은 임계 영역에 진입할 수 있는 쓰레드의 개수를 늘리거나 줄일 수 있다는 뜻이다. 임계 영역에 진입할 수 있는 쓰레드를 하나로 제한할 경우 세마포어의 카운트를 1로 둬야 하는데, 이렇게 세마포어의 카운트를 1로 두면 이를 뮤텍스라 할 수 있다.


4. volatile 키워드

- volatile 키워드는 다음 두 가지 의미를 지닌다.

- 최적화를 수행하지 마라.

- 메모리에 직접 연산하라(혹은 캐쉬하지 마라.)

+ Recent posts