[C/C++] 스핀락 (Spin Lock)

그림자왕국·2021년 2월 28일
0

C++

목록 보기
2/24

	InitializeCriticalSectionAndSpinCount(&m_lock, 4000); // m_lock의 임계영역 생성 및 초기화(섹션이름, 스핀카운트) 

스핀락은 Busy Waiting을 통하여 스레드를 잠재우지 않고 약간의 자원을 소모하는 대신 context switching을 방지하여 gain을 얻을 수 있다.

Busy Wating : 현재 CPU를 사용하는 스레드가 무한 루프를 돌면서 다른 쓰레드에게 CPU를 양보하지 않는 것이다.

하지만 임계영역에 있는 스레드가 Lock을 오래 사용한다면 Busy Wating은 그 만큼 CPU 자원을 소모하고 있으니 Sleeping보다 자원을 더 낭비하게 된다.

profile
언리얼 엔진 매니아입니다.

0개의 댓글