동기화란?
동기화는 여러 스레드가 동시에 공유 자원에 접근할 때 데이터의 일관성을 유지하기 위한 기법이다.
동기화가 필요한 이유
스레드는 프로세스의 메모리를 공유하기 때문에 여러 스레드가 동시에 같은 데이터를 수정하면 문제가 발생할 수 있다.
예를 들어 하나의 변수에 여러개의 스레드가 동시에 접근하면 문제가 발생할 수 있다.
이를 Race Condition이라고 한다.
이것들을 해결하기 위해 한번에 접근 가능한 스레드 수를 제한하는 방식이 사용된다.
임계 영역
임계영역은 여러 스레드가 동시에 접근하면 안되는 코드 영역이다.
뮤텍스
뮤텍스는 한 번에 하나의 스레드만
임계 영역에 접근할 수 있도록 제한하는 방식이다.
- Lock을 획득한 스레드만 작업 수행 가능
- 작업이 끝나면 Unlock을 통해 다른 스레드가 접근 가능
세마포어
세마포어는 동시에 여러 개의 스레드가
자원에 접근할 수 있도록 허용하는 방식이다.
- 내부적으로 접근 가능한 개수 관리
- 설정된 개수만큼 스레드 접근 가능
뮤텍스와 세마포어 비교
뮤텍스 : 1개 스레드만 접근 가능
세마포어 : N개 스레드 접근 가능