Busy Waiting

2026. 6. 5. 18:45·공부한 것

Busy Waiting?

바쁜 대기(Busy Waiting)는 말그대로 CPU를 바쁘게 쓰면서 기다린다는 뜻이다.

어떤 스레드에서 공유 자원을 쓰려할때 다른 스레드가 이미 락(Lock)을 쥐고 있을 때 Sleep 하는 대신 무한 루프를 돌면서 락이 풀렸는지 계속 확인하는 방식이다.

예시 코드

volatile int lock = 0;

void critical_section(){
    while (lock == 1) {
    }
    lock = 1;
    lock = 0;
}

이런식으로 구현된다.

왜 씀?

굳이 Sleep 시키지 않고 무한 루프를 돌면서 CPU를 낭비해가면서 이걸 쓰는 이유가 있다.

  • 속도가 빠르다: 조건이 만족되었을 때는 속도가 빠르다. 뮤텍스(Mutex)같은 방식은 락을 못 얻으면 Sleep시키고 락이 풀리면 깨우는데 이때 Context Switching이 있어 무거운데, 이 방식은 스레드가 계속 실행중이어서 락이 풀리자마자 딜레이 없이 다음 코드 실행이 가능하다.

다만 루프 돌고 있는 코어는 락 풀릴 때까지 계속 무한 루프 도느라 점유율 100을 찍어서 낭비하게 된다.

특히 싱글 코어 환경에서는 Deadlock에 걸릴 위험이 있다.

'공부한 것' 카테고리의 다른 글

Context Switching  (0) 2026.06.05
Spinlock and Mutex  (0) 2026.06.05
Calling Convention  (0) 2026.05.19
Stack Canary  (0) 2026.05.18
Shellcode - orw Shellcode  (0) 2026.05.17
'공부한 것' 카테고리의 다른 글
  • Context Switching
  • Spinlock and Mutex
  • Calling Convention
  • Stack Canary
hsnyus
hsnyus
rev, pwn
  • hsnyus
    hsnyus
    hsnyus
  • 전체
    오늘
    어제
    • 분류 전체보기 (109) N
      • About (1)
      • 대외활동 (15)
      • 보안관제 (2)
      • 학교 (3)
      • 개발일지 (5)
      • 공부한 것 (38) N
      • 사이버가디언즈 (9)
      • 일반 (8)
      • 스터디 (10)
      • Wargame (18)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ctf
    프로그래밍
    c언어
    문제풀이
    드림핵
    사이버가디언즈
    DreamHack
    워게임
    스터디
    개발
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
hsnyus
Busy Waiting
상단으로

티스토리툴바