동기화(synchronization)

Rudy·2023년 1월 2일
0

동기화 (synchronization)

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

경쟁 조건 (race condition)

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

임계 영역(critical section)

공유 데이터의 일관성을 보장하기 위해 하나의 프로세스/스레드만 집입해서 실행 가능한 영역

mutual exclusion

하나의 프로세스/스레드만 집입해서 실행, mutual exclusion 사용방법은 Lock을 사용한다

뮤텍스(mutex)

락을 가질 수 있을 떄 까지 휴식을 말한다 CPU 과부하를 방지 한다

뮤텍스가 스핀락보다 항상 좋을까 생각해보자!

상황에 따라서 다르지만 멀티코어 환경이고 critical section 에서의 작업이 컨텍스트 스위친보다 더 빨리 끝난다면 스핀락이 뮤텍스보다 더 이점이 있다.

세마포(semaphore)

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

뮤텍스와 세마포 차이점

뮤텍스틑 priority inheritance 속성을 가진다. 세마포는 그 속성이 없다.
priority inheritance란 여러 프로세스/스레드가 동시해 실행되면 CPU가 컨텍스트 스위칭이 발생하면서 누구를 먼저 실행 시킬건지 정한다. 이것을 스케줄링이라고 말한다. 여러가지 방법중 하나가 스레드/프로세스 우선 순위가 높은것부터 실행 한다
ex) hish p1 과 low p2가 lock 가지고 있다고 하면 p1은 p2 의존성을 가진다. 그래서 p2가 lock 반환 할떄가지 p1 아무것도 할수 없다. 뮤텍스는 여기서 p2 우선순위를 p1으로 올려준다
이것을 priority inheritance 한다

뮤텍스와 세마포 차이점은 priority inheritance 이다. 세마포는 누가 lock 해제할지 알수 없다. 상호 배제만 필요하다면 뮤텍스를, 작업 간의 실행 순서 동기화가 필요하다면 세마포를 사용 하는 것이 좋을거 같다.

profile
주니어 개발자

0개의 댓글