본문 바로가기
Programming

스레드

by peter paak 2020. 8. 19.
728x90

Thread Safe

멀티 스레드 환경에서 여러 스레드가 하나의 객체 혹은 변수를 공유하면서 발생하는 동기화 문제를 막기 위한 방법

이유

스레드는 3단계 작업을 거친다

  1. 읽기
  2. 계산
  3. 저장

3단계 중 2단계의 계산 과정에서 레지스트리에서 계산된 값이 변수에 저장이 되지 못하면 다음 스레드를 넘어가서 다시 읽기의 과정을 거친다. 그러면 이전 스레드에서 업데이트 되지 못한 변수를 그대로 읽어서 다시 작업을 하게된다.

상호배제(mutual exclusion)

공유 자원에 접근하는 임계영역을 동기화 기법으로 순서대로 접근하도록 제어

  • 임계자원(critical resource)
  • 임계영역(critical section)

동기화 기법

뮤텍스(Mutex)

  • 임계영역에 하나의 스레드만 접근가능

세마포어(Semaphore)

  • 임계영역에 여러개의 스레드가 접근가능
  • 카운터로 동시에 접근가능한 스레드 수를 제어

동기 vs 비동기

동기(Synchronous)

  • 두개의 프로세스가 데이터를 주고 받을 때, 주고 받는 순서가 일정

비동기(Asynchronous)

  • 두개의 프로세스가 데이터를 주고 받을 때, 주고 받는 순서가 일정하지 않은 것

교착상태 vs 기아상태

교착상태(Deadlock)

  • 두개의 스레드가 서로의 Lock이 풀리기를 기다리는 무한대기상태
  • 여러 프로세스들이 동일한 자원을 요청할 때 발생

교착상태 발생 조건

  1. 상호배제 : 공유자원에 접근하는 순서를 지정
  2. 점유대기 : 프로세스가 자원을 가진 상태에서 다른 자원을 기다림
  3. 비선점 : 프로세스가 자원의 사용을 끝낼 때까지 뺏길 수 없음
  4. 순환대기 : 프로세스는 다음 프로세스가 원하는 자원을 가지고 있음

기아상태(Starvation)

  • 프로세스의 우선순위가 낮아 자원을 계속 할당받지 못하는 상태
  • 여러 프로세스들 사이에서 자원을 받지 못할 때 발생
728x90