프로세스에서 스레드를 나누어 병렬처리를 하고 결과값을 출력해야 한다면?
최종 결과값을 알기 위해서는 모든 스레드가 종료되어야 한다.
join과 같은 스레드 함수를 이용하여 모든 스레드의 종료상태를 받았을 경우 결과값을 출력하도록 만든다.만약 스레드 하나가 작업을 수행하는 시간이 길어진다면?
Context Switching이 발생하여 스레드 2가 실행된다면 결과값에 각 스레드의 연산값이 누적되기 전에, 또는 갱신되기 전에 다음 스레드가 실행되어 문제가 발생할 수 있다.Mutual exclusion (Mutex)이다.만약 스레드 1이 임계영역에서 작업을 수행하고 있다고 가정해보자.
임계영역에서 스레드 1의 작업이 끝나지 않은 시점에 스레드 2로 Context Switching 이 발생하고, 스레드 2가 동일한 임계영역에서 작업을 한다면 예상하지 못하는 결과가 발생할 수 있다.
따라서 만약 스레드 1의 작업이 끝나지 않았다면 스레드 2는 임계영역에 접근하기 전에 대기하도록 만든다면 이러한 문제를 해결할 수 있다.