스핀락(spinlock) 뮤텍스(mutex) 세마포(semaphore) 각각의 특징과 차이

강민승·2023년 4월 13일
0
post-thumbnail

race condition(경쟁조건)

  • 여러 프로세스/스레드가 동시에 같은 데이터를 조작할 때 타이밍이나 접근 순서에 따라 결과가 달라질 수 있는 상황

동기화 (synchronization)

  • 여러 프로세스/스레드를 동시에 실행해도 공유 데이터의 일관성을 유지하는 것

임계 영역 (critical section)

  • 공유 데이터의 일관성을 보장하기 위해
  • 하나의 프로세스/스레드만 진입해서 실행 가능한 영역 → mutual exclusion!
  • 그럼 어떻게 mutual exclusion을 보장할 수 있을까

즉, 컨텍스트 스위칭으로 하던 중간에 바뀌는 경우는 없다고 한다.

이 방식을

하지만 단점, 기다리는 동안 CPU를 계속 낭비한다.

즉 , 락이 준비됐을 때 츄라이 하면 된다.

→ 뮤텍스, 락을 가질 수 있을 때까지 휴식

그럼 드는 의문 —> 뮤텍스가 스핀락보다 항상 좋은걸까?

ans) 멀티 코어 환경이고, critical section에서의 작업이 컨텍스트 스위칭보다 더 빨리 끝난다면 스핀락이 뮤텍스보다 더 이점이 있다.

semaphore(세마포)

signal mechanism을 가진, 하나 이상의 프로세스/스레드가 critical section에 접근 가능하도록 하는 장치

signal()과 wait()을 하나의 스레드나 프로세스에 꼭 넣어둘 필요는 없다.

드는 의문 → 뮤텍스와 이진 세마포어는 같은 것이 아닌가?

→ 뮤텍스는 락을 가진 자만 락을 해제 할 수 있지만, 세마포어는 그렇지 않다.

뮤텍스는 priority inheritance 속성을 가진다. 하지만 세마포어는 그 속성이 없다.

priority inheritance 은 우선순위로 스케쥴링을 하는 것인데,

low P2의 우선순위를 high만큼 올려서 스케쥴링을 하는 방법

추가적인 공부 필

→ 상호 배제만 필요하다면 뮤텍스를, 작업 간의 실행 순서 동기화가 필요하다면 세마포어를 권장한다.

출처 | 쉬운코드 유튜브

profile
Step by Step goes a long way. 꾸준하게 성장하는 개발자 강민승입니다.

0개의 댓글