<1> 동기화(=Synchronization)란?


- 두 개 이상의 스레드가 공통된 자원을 서로 사용하려고 할 때 이를 race condition이라고 한다. (동기화에서 스레드라고 함은 실행중인 코드라고 생각하면 된다.) 예를 들어 전역변수 val이 공유 자원이고, val의 초기값이 0일 때 다음과 같은 경우가 발생할 수 있다.


 스레드A

 스레드B

 get val(0)

 get val(0)

 increment val(0 -> 1)

 

 

 increment val(0 -> 1)

 write back val(1)

 

 

 write back val(1)


스레드 A와 B가 동시에 실행중이 아니라면 val이 2번 증가하므로 최종적으로 2가 저장되었을 것이다. 하지만 두 개의 스레드가 동시에 시행되면 위의 표와 같이 실행 순서에 따라서 결과가 달라지는 문제가 발생 할 수 있다.


위와 같이 두 개 이상의 스레드가 병렬적으로 실행 중일때 공유 자원이 존재하면 실행 순서에 따라 결과가 달라진다. 이럴 경우 프로그램의 결과를 예측하기 굉장히 어려우며 따라서 디버깅도 어렵다. 동기화란 이러한 race condition을 방지하면서 두 개 이상의 스레드를 병렬적으로 실행하게 할 수 있도록 해준다. 동기화의 자세한 구현과 기법은 다음 챕터에서 다룬다.

+ Recent posts