[운영체제]mutex를 이용한 쓰레드에서의 데이타 일치 문제
- 최초 등록일
- 2006.04.27
- 최종 저작일
- 2006.04
- 6페이지/ MS 워드
- 가격 1,000원
소개글
mutex를 이용한 쓰레드에서의 데이타 일치 문제
(소스코드 + 실행캡쳐 + 참고자료)
예를 들어서 두개의 쓰레드가 2개의 변수를 업데이트하려고 하는데, 하나의 쓰레드는 2개의 변수를 0으로 다른 하나는 1로 변경을 시도한다고 하자. 만약 이러한 변경이 같은 시간(same time)에 일어난다면 하나는 0으로 변경이 되었지만 다른 하나는 1로 변경되는 문제가 발생할수도 있을것이다. 이러한 문제를 context-switch 라고 하는데, 하나의 쓰레드가 변경하고자 하는 첫번째 변수를 0으로 바꾸었는데, 2번째 변수를 0으로 바꾸기 전에 다른 쓰레드가 변수를 모두 1로 바꾸어 버릴수 있을것이다. 그리고 나서 다시 첫번째 쓰레드가 두번째 변수를 0으로 바꾸게 되면, 첫번째 변수는 1이지만 두번째 변수는 0이 되는 데이타 불일치 상황이 발생하게 될것이다.
Mutex를 이용하면 된다.
목차
▶ Pthread 동기화
▶ Source code
▶ 참고자료
본문내용
▶ 참고자료
쓰레드에서의 데이타 일치 문제
예를 들어서 두개의 쓰레드가 2개의 변수를 업데이트하려고 하는데, 하나의 쓰레드는 2개의 변수를 0으로 다른 하나는 1로 변경을 시도한다고 하자. 만약 이러한 변경이 같은 시간(same time)에 일어난다면 하나는 0으로 변경이 되었지만 다른 하나는 1로 변경되는 문제가 발생할수도 있을것이다. 이러한 문제를 context-switch 라고 하는데, 하나의 쓰레드가 변경하고자 하는 첫번째 변수를 0으로 바꾸었는데, 2번째 변수를 0으로 바꾸기 전에 다른 쓰레드가 변수를 모두 1로 바꾸어 버릴수 있을것이다. 그리고 나서 다시 첫번째 쓰레드가 두번째 변수를 0으로 바꾸게 되면, 첫번째 변수는 1이지만 두번째 변수는 0이 되는 데이타 불일치 상황이 발생하게 될것이다.
Mutex를 이용하면 된다.
pthread 라이브러리는 이러한 문제의 해결을 위해서 mutex 라는 것을 사용한다. mutex 는 IPC 에서 데이타 접근 통제를 위해서 사용하는 "세마포어"와 매우 비슷한 일을한다. mutex 는 세마포어와 마찬가지로 lock 을 사용하는데, mutex 는 lock 에 대해서 다음과 같은 3가지 사항에 대해서 보증한다.
1. Atomicity - mutex 잠금(lock)는 최소단위 연적(atomic operation) 으로 작동한다. 이말의 뜻은 하나의 쓰레드가 mutex 를 이용해서 잠금을 시도하는 도중에 다른 쓰레드가 mutex 잠금을 할수없도록 해준다는 뜻이다. 한번에 하나의 mutex 잠금을 하도록 보증해준다.
2. Singularity - 만약 스레드가 mutex 잠금을 했다면, 잠금을 한 쓰레드가 mutex 잠금을 해제 하기 전까지 다른 어떠한 쓰레드도 mutex 잠금을 할수 없도록 보증해준다.
3. Non-Busy Wait - 바쁜대기 상태에 놓이지 않는다는 뜻으로, 하나의 쓰레드가 mutex 잠금을 시도하는데 이미 다른 쓰레드가 mutex 잠금을 사용하고 있다면 이쓰레드는 다른 쓰레드가 락을 해제하기전까지 해당 지점에 머물러 있으며 이동안은 어떠한 CPU 자원도 소비하지 않는다(이를테면 sleep).
참고 자료
없음