여러 스레드가 한정적인 시스템자원에 동시에 접근할 경우 문제가 발생하게 됩니다. 이 문제를 방지하기 위해 여러 스레드에게 하나의 자원에 대한 처리권한을 주거나 순서를 조정하는 기법을 동기화라 일컫습니다.

스레드 동기화

  1. 실행순서의 동기화 : 스레드의 실행 순서를 정의하고, 이 순서를 반드시 따르도록 하는 방법입니다.
  2. 메모리 접근에 대한 동기화 : 메모리 접근에 있어서 동시 접근을 막는 방법으로 실행의 순서와 상관없이 한 순간에 하나의 스레드만 해당 자원에 접근토록 하는 것입니다.

동기화 기법

조금 더 자세히 알아보죠

유저모드의 동기화

  1. 임계구역 기반의 동기화
  2. 인터락 함수 기반의 동기화

커널모드에서의 동기화

  1. 세마포어
  2. 뮤텍스
  3. 모니터

임계영역이란?

Untitled

임계영역은 둘 이상 스레드가 동시접근해서는 안되는, 공유자원을 접근하는 코드의 일부를 뜻합니다. 동기화를 하지 못하면 데드락에 빠질 수도 있죠.

→ 임계영역 문제를 해결하기 위해서는 3가지 필수조건이 있습니다.

  1. 상호배제 : 한순간에 하나의 스레드만 접근
  2. 진행 : 임계구역에서 실행중인 프로세스가 없고 별도 동작이 없는 프로세스들은 임계구역 진입후보가 된다.
  3. 한정대기 (Bounded Waiting) : 특정 프로세스가 임계구역에 진입신청하고, 받아들여질 때 까지 다른 프로세스들이 임계구역에 진입하는 횟수는 제한이 있어야 합니다.

뮤텍스와 세마포어의 차이