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