둠치킨
코딩하는 둠치킨
둠치킨

블로그 메뉴

  • 홈
  • 분류 전체보기 (218) N
    • BOJ (171) N
      • 스택 (14)
      • 큐 (5)
      • 덱 (4)
      • 그래프 (30)
      • 배열 (8)
      • 재귀 (12)
      • 브루트 포스 (2)
      • 그리디 알고리즘 (7)
      • 다이내믹 프로그래밍 (13)
      • 백트래킹 (24)
      • 기하학 (4)
      • 트리 (4)
      • 구현 (14)
      • 수학 (3)
      • 맵 (1)
      • 다익스트라 (2)
      • 누적합 (5) N
    • 자료구조 (14)
      • 스택 (3)
      • 큐 (5)
      • 덱 (2)
      • 그래프 (1)
      • 트리 (1)
      • 힙 (1)
      • 정렬 (1)
    • C++ (11)
      • 모두의코드 (2)
      • Effective C++ (3)
      • C++ STL (6)
    • 컴파일러 (1)
    • OS (17)
    • 컴퓨터 구조 (2)
    • Unreal Engine 5 (2)

공지사항

전체 방문자
오늘
어제

인기 글

최근 글

태그

  • BFS
  • boj
  • Bruteforce
  • C
  • C++
  • C++ STL
  • Cache Memory
  • deadlock
  • DFS
  • Effective C++
  • java
  • Mutex
  • next_permutation
  • os
  • Process
  • rotate
  • semaphore
  • spin lock
  • STL
  • STL C++
hELLO · Designed By 정상우.
둠치킨

코딩하는 둠치킨

OS

동기화 객체란?

2025. 6. 23. 23:49

동기화 객체란?

멀티스레드 환경에서 여러 실행 흐름이 공유 자원에 동시에 접근하면 충돌이나 비정상적인 동작이 발생할 수 있다. 이를 방지하기 위해 사용되는 도구가 동기화 객체(Synchronization Primitives)이다.

대표적인 동기화 객체로는 뮤텍스(Mutex), 세마포어(Semaphore), 스핀락(Spin Lock)이 있으며,
각각의 특징과 사용 목적은 다르다.


뮤텍스 (Mutex)

뮤텍스는 Mutual Exclusion의 줄임말로, 단일 자원에 대해 하나의 스레드만 접근할 수 있도록 제한한다.

  • lock()과 unlock()으로 자원 접근을 제어한다.
  • 락을 획득한 스레드만 해제할 수 있는 소유 개념이 존재한다.
  • 다른 스레드가 락을 요청하면 커널이 해당 스레드를 대기 상태로 전환시킨다.
  • 일반적으로 임계영역 보호를 위한 가장 보편적인 도구다.

세마포어 (Semaphore)

세마포어는 정수형 카운터로 동작하는 동기화 객체로, 복수 자원이나 순서 제어가 필요한 상황에서 사용된다.

  • wait() 또는 P() 연산으로 카운터를 감소시키며, 0 이하이면 블로킹된다.
  • signal() 또는 V() 연산으로 카운터를 증가시키며, 대기 중인 스레드를 깨운다.
  • 소유 개념이 없어, 자원을 점유한 스레드가 아닌 다른 스레드도 signal() 호출 가능하다.
  • 스레드 간뿐 아니라 프로세스 간 동기화에도 사용할 수 있다.
  • 카운팅 세마포어는 복수 자원을 제어하고, 이진 세마포어는 뮤텍스처럼 동작할 수 있다.

스핀락 (Spin Lock)

스핀락은 짧은 시간 동안 자원 보호가 필요할 때 사용하는 경량 락이다.

  • 락이 걸려 있는 동안에도 스레드는 CPU를 양보하지 않고 반복(loop)하면서 락을 계속 확인한다.
  • 락이 해제되면 즉시 진입할 수 있으므로, 컨텍스트 스위칭 비용 없이 빠른 동기화가 가능하다.
  • 단점은 CPU를 계속 점유하며 대기(busy waiting)하므로, 자원 대기 시간이 길 경우 비효율적이다.
  • 주로 커널 내부, 멀티코어 환경, 실시간 제어 루프 같은 곳에서 사용된다.

세 가지 동기화 객체 비교

항목 뮤텍스 (Mutex) 세마포어 (Semaphore) 스핀락 (Spin Lock)
자원 수 단일 자원 보호 다중 자원 보호 가능 단일 자원 보호
소유 개념 있음 (락 건 스레드만 해제 가능) 없음 (다른 스레드도 해제 가능) 없음
사용 대상 스레드 간 동기화 스레드/프로세스 간 동기화 스레드 간 (짧은 대기 시간)
동작 방식 lock / unlock wait / signal 반복 검사 (busy waiting)
블로킹 여부 블로킹 (스레드 대기 상태) 블로킹 비블로킹 (CPU 점유)
특징 일반적인 임계영역 보호 자원 수 관리, 순서 제어 빠른 락, CPU 낭비 가능성
 

사용 예시

  • 뮤텍스: 파일 쓰기, 데이터베이스 연결 등 하나의 자원을 보호할 때
  • 세마포어: 제한된 수의 리소스 풀(DB 커넥션 풀, 버퍼 슬롯) 제어
  • 스핀락: 커널 내부 짧은 임계영역, 인터럽트 컨텍스트, busy-wait 상황
저작자표시 (새창열림)

'OS' 카테고리의 다른 글

경쟁 조건(Race Condition)이란?  (0) 2025.06.24
파편화 (Fragmentation)  (0) 2025.06.24
데드락(Deadlock)이란?  (0) 2025.06.23
임계영역(Critical Section) 이란?  (0) 2025.06.23
함수 호출의 리턴 주소는 어떻게 스택에 저장될까?  (0) 2025.06.23
    'OS' 카테고리의 다른 글
    • 경쟁 조건(Race Condition)이란?
    • 파편화 (Fragmentation)
    • 데드락(Deadlock)이란?
    • 임계영역(Critical Section) 이란?
    둠치킨
    둠치킨
    코딩 공부를 위한 코딩 블로그 기록 일기

    티스토리툴바