본문 바로가기

Solution/면접

[개발자 면접] 스레드 동기화와 동기화 구현방식에 대해서

728x90

Q. 스레드 동기화에 대해서 설명해보세요.

스레드 동기화는 멀티스레드 환경에서 다수의 작업이 실행해서 공유데이터에 동시에 접근할 경우 문제가 발생하는데 이런 접근을 막는 것을 말한다. 


Q. 상호배제, 임계구역, Race condition에 대해서 설명해보세요.

여러 스레드가 임계구역에 대해서 경쟁(Race condition)을 할 때 상호배제가 이루어져야만 스레드 동기화가 보장된다.

 

# Race condtion

두 개 이상의 프로세스가 공통 자원을 병행적으로 읽거나 쓸 때, 공용 데이터에 대한 접근이 순서에 따라 실행 결과가 달라지는 상황 Race Condition이 발생하게 되면, 모든 프로세스에 원하는 결과가 발생하는 것을 보장할 수 없음. 따라서 이러한 상황은 피해야 하며 임계구역 상호배제를 통해 해결한다.

 


Q. 멀티 스레드 동기화 구현 방식에 대해서 설명해보세요.

멀티 스레드 동기화 구현방식에는 3가지 정도 있다.

뮤텍스 : 임계구역 실행시간이 길 경우, 단일 CPU에 적합, 사용자 모드와 사용자 응용프로그램에서 사용하기 적합

스핀락 : 임계구역의 실행시간이 짧은 경우 멀티 코어 CPU에 적합, 커널 모드, 커널 코드에서 사용하기 적합.

세마포 : 모든 교착 상태를 해결하지 못함


Q. 세마포와 뮤텍스의 차이에 대해서 설명해보세요.

세마포어는 여러개의 프로세스가 접근 가능한 공유자원을 관리하는 방식이고, 뮤텍스가 될 수 있지만, 뮤텍스는 한 번에 한 개의 프로세스만 접근 가능하도록 관리하는 방식입니다. 따라서 뮤텍스는 세마포어가 될 수 없습니다.

 

, 세마포어는 다른 프로세스가 세마포어를 해제할 수 있지만, 뮤텍스는 락을 획득한 프로세스만 락을 반환할 수 있습니다.

 

 

728x90