※ 전남대학교 박태준 교수님의 운영체제 강의를 듣고, 정리한 내용입니다.
하나의 자원을 두고 여러 프로세스 ( 혹은 쓰레드 ) 가 공동으로 이용하는 변수, 메모리, 파일 등을 공유 자원이라고 합니다.
공유자원은 공동으로 이용되기 때문에 누가 언제 데이터를 읽거나 쓰느냐에 따라 결과가 달라질 수 있습니다.

예시로 두 쓰레드가 공유자원 sum 에 10을 더하는 과정을 살펴보면..

즉 공유자원 접근 과정에서 쓰레드간 우선순위가 없다보니, 명령어를 처리하는 과정에서 스케줄링이 발생하면 명령어가 분리되게 됩니다.
이후 다시 스케줄링이 발생해서 원래 쓰레드로 돌아오면 전에 했던 작업을 이어서 하기 때문에, 자신의 이전 작업만 기억하는 쓰레드는 다른 쓰레드에서 처리된 작업을 기억하지 못하고 작업을 진행하게 됩니다.
이를 경쟁 상태 ( Race Condition ) 라고 합니다.
2개 이상의 프로세스 ( 혹은 쓰레드 ) 가 공유 자원을 병행적으로 읽거나 쓰는 상황
경쟁 상태가 발생하면 공유 자원 접근 순서에 따라 실행 결과가 달라질 수 있음
데이터가 오염됨
멀티쓰레드 환경에서 자주 발생함
이 경쟁 상태를 해결하기 위해 동기화 ( Synchronization ) 기법이 도입되었습니다.
동기화는 공유자원에 대해 다수의 프로세스 ( 혹은 쓰레드 ) 가 동시에 접근할 때 공유데이터가 훼손되는 문제의 해결책으로써 도입되었습니다.
한 프로세스 ( 혹은 쓰레드 ) 가 공유 자원에 동시에 접근하는 것이 아닌 차례대로 접근하게 함으로써 경쟁 상태 문제를 해결할 수 있었습니다.
한 프로세스 ( 혹은 쓰레드 ) 가 공유 데이터를 배타적, 독점적으로 접근
이런 작업을 상호배제 라고 부름
그리고 상호배제가 필요한 ( 혹은 적용된 ) 구간을 임계영역 이라고 부름

임계 구역이 오직 한 프로세스만 배타적, 독점적으로 사용되도록 하는 기술
즉 임계구역에 먼저 진입한 쓰레드가 임계구역의 실행을 끝낼 때 까지 다른 프로세스가 진입하지 못하도록 보장
공유 자원 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역
공유 자원에 접근하는 프로그램 코드 영역
Shared Data 가 있는 영역
공유 자원과 동기화에 대한 설명이 깔끔하게 잘 정리되어 있어서 이해하기 수월했습니다. 감사합니다!