본문 바로가기
CS/운영체제

16. 스레드 동기화 (Thread Synchronization)

by D.O.T 2024. 6. 15.
스레드 동기화란 뭘까?

 

스레드 동기화란 다수의 스레드가 하나의 자원에 동시에 접근할 때 발생할 수 있는 문제점을 해결할 수 있는 방법이다.

다수의 스레드가 하나의 자원에 동시에 접근한다는게 무슨 말일까?

스레드 동기화 이해하기 

 

먼저, 컴퓨터의 구조를 잘 알고 있어야한다.

논리회로, 컴퓨터 구조, 운영체제 앞 단원을 열심히 공부했다면 쉽게 이해할 수 있는 부분이다.

 

이해를 해보자.

컴퓨터는 클럭 단위로 동작한다.

클럭 단위로 동작한다는 것은 하나의 작업을 수행할 때, 일정 시간이 소요된다는 의미이다. 

TEMP = 10 이 있을 때, 하나의 클럭이 소요되는데 0.001초라고 해보자. 

 

스레드 A와 B가 TEMP에 입력한 값을 더하려고 한다. 

1. 0초에 스레드 A는 TEMP의 값을 확인한다. 값은 10이다. 5를 더한다. 더하기 작업은 2클럭이 소요된다.

-> 더하기 작업으로 인한 시스템 콜 발생

2. 0.001초에 스레드 B는 TEMP의 값을 확인한다. 아직 스레드 A의 작업이 끝나지 않아서 TEMP는 여전히 10이다. 마찬가지로 스레드 B도 5를 더하는 연산을 수행한다.

-> 더하기 작업으로 인한 시스템 콜 발생

3. 0.002초에 스레드 A의 작업이 끝나고 TEMP에는 15가 저장된다.

4. 0.003초에 스레드 B의 작업이 끝나고 TEMP에는 15가 저장된다.

최종적으로 연산된 TEMP의 결과는 15가 되는 문제가 발생한다.

인터럽트 외에도 타임슬라이스(TimeSlice) 등의 문제로 스케줄링이 바뀔 때도 이런 문제가 발생할 수 있다.

 

A와 B가 실제로 동시에 작업을 한 것은 아니지만, 컴퓨터 구조 상 인간의 눈에는 동시에 작업을 수행한 것 처럼 보인다.

이런 문제를 동시 접근 문제라고 하고 해결하기 위한 방법이 스레드 동기화이다.

스레드뿐만 아니라 프로세스도 해당 문제를 가지고 있다. 왜냐하면 각 스레드와 각 프로세스는 독립적이기 때문이다.

서로 할 일만 한다는 것이다!


이런 문제점은 다중 코어나 커널 코드에서 매우 많이 발생한다.

전문가들은 이 문제를 해결하기 위해서 Thread Synchronization 이 필요했고 이에 대한 중요한 두 개념이 나왔다.

 

임계구역(Critical Section)과 상호배제(mutual exclusion)이다.

'CS > 운영체제' 카테고리의 다른 글

18. 상호배제 구현 방법  (0) 2024.06.16
17. 상호 배제 (Mutual Exclusion)  (0) 2024.06.15
15. CPU Scheduling Algorithm  (1) 2024.04.22
14. CPU Scheduling  (0) 2024.04.22
13. 멀티스레드 구현  (0) 2024.04.22