두 개 이상의 프로세스나 쓰레드가 동시에 공유 자원에 접근하려고 할 때, 그 실행 순서나 타이밍에 따라
결과가 달라지는 상황
을 말한다.
주로 적절한 동기화 메커니즘 부재 등 동시성 문제를 고려하지 않았을때 발생할 수 있다.
뮤텍스(Mutex)
나세마포어(Semaphore)
와 같은 동기화 도구를 사용해 쓰레드의 자원 접근을 제어한다.임계 구역(Critical Section)
을 설정한다.- 공유 자원을 줄이거나
불변성(immutable)
을 유지하도록 설계한다.
공유 자원에 접근할 때 순서 등의 이유로 결과가 달라지는 영역을 뜻하며, 이 임계구역을 해결하는 방법이 동기화 메커니즘(ex. 세마포어)을 사용하는 것이다.
공유된 자원의 데이터를 여러 프로세스/스레드가 접근하는 것을 막는 방식이다.
뮤텍스와 달리 동기화 대상이 하나 이상
이며, 사용하고 있는 스레드/프로세스의 수를 공통으로 관리하는 하나의 값을 이용해 상호배제를 달성한다.
공유 자원에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 사용자가 접근할 수 있으며, 각 프로세스는 세마포어의 값을 확인하고 변경할 수 있다.
공유된 자원의 데이터를 여러 프로세스/스레드가 접근하는 것을 막는 방법이며, 세마포어와 달리
동기화 대상이 하나
이다.
즉, 특정 자원을 하나의 프로세스/스레드만 사용할 수 있도록 한다. 한 프로세스에 의해 소유될 수 있는 Key를 기반으로 한 상호 배제 기법이고, Key에 해당하는 어떤 객체(Object)가 있으며, 이 객체를 소유한 스레드/프로세스만이 공유 자원에 접근할 수 있다.