동기화 객체란?

  • 여러 쓰레드가 동시에 접근할 수 있는 영역에 쓰레드의 접근 순서를 맞추기 위해 사용하는 객체를 말합니다.
  • 동기화 객체는 크게 유저 모드 동기화 객체, 커널 모드 동기화 객체 가 있습니다.




동기화 객체를 사용하는 이유

  • 여러 쓰레드에서 접근할 수 있는 영역의 데이터를 특정 쓰레드가 변경하고 있을 때 다른 쓰레드가 접근하여 동일한 데이터를 읽거나 쓰기를 하여 의도하지 않은 결과가 발생될 수 있기 때문입니다.




유저 모드 동기화 객체의 특징 및 종류

유저 모드 동기화 객체의 특징

  • 자원에 대한 접근이 가능한지 여부를 유저 모드 상태에서 확인합니다.
  • CriticalSection, SRWLock 은 스핀 락의 일부 기능을 응용하여 스핀 카운트 만큼 루프를 돌면서 자원에 대한 접근이 가능한지 여부를 확인합니다.
  • 스핀 카운트를 모두 소모하고 자원에 대한 접근이 불가능할 경우 커널 모드로 전환되어 접근이 가능해질 때까지 블락됩니다.




유저 모드 동기화 객체의 종류

  • 유저 모드 동기화 객체의 종류로는 CriticalSection, SRWLock 이 있습니다.




CriticalSection

  • 배타적인 접근만을 허용합니다.
  • 중복락이 가능합니다.




SRWLock

  • Read, Write 락을 구분하여 사용할 수 있습니다.
  • 중복락이 불가능합니다.




커널 모드 동기화 객체의 특징 및 종류


커널 모드 동기화 객체의 특징

  • 자원에 대한 접근이 가능한지 여부 조차도 커널 모드로 전환하여 확인합니다.
  • 커널 모드 객체이기 때문에 다른 프로세스에 있는 쓰레드간에 동기화에도 사용될 수 있습니다.
  • 커널 모드의 시그널 상태 여부를 확인하여 동기화를 할 수 있습니다.
  • WaitForSingleObject, WaitForMultipleObject 등을 통해 커널 오브젝트의 시그널을 확인합니다.




커널 모드 동기화 객체의 종류

  • 커널 모드 동기화 객체의 종류로는 Mutex, Semaphore, Event 등이 있습니다.




Mutex

  • 배타적인 접근만을 허용합니다.
  • 중복락이 가능합니다.




Semaphore

  • 한 번에 접근할 수 있는 쓰레드의 개수를 지정할 수 있습니다.




Event

  • Event 는 Manual 또는 Auto 여부에 따라서 작동 방식이 달라지는 커널 모드 동기화 객체입니다.
  • Manual Event는 넌 시그널 상태에서 시그널 상태로 전환되었을 때 해당 Event의 시그널을 대기하고 있던 모든 쓰레드들을 깨우고 현재의 시그널 상태를 유지합니다.
  • Auto Event는 넌 시그널 상태에서 시그널 상태로 전환되었을 때 해당 Event의 시그널을 대기하고 있던 쓰레드들 중 하나를 깨우고 자동으로 넌 시그널 상태로 전환됩니다.

+ Recent posts