프로그래밍/의문
CRITICAL_SECTION의 default spin count
제페
2019. 4. 10. 01:24
반응형
CRITICAL_SECTION cs;
InitializeCriticalSection(&cs);
DWORD prevSpinCount = SetCriticalSectionSpinCount(&cs, 1000);
SetCriticalSectionSpinCount는 파라미터인 CriticalSection의 SpinCount를 수정하고, 이전의 SpinCount 값을 반환한다.
SetCriticalSectionSpinCount function (synchapi.h)
Sets the spin count for the specified critical section.
docs.microsoft.com
vs2019 release, x64, Windows10 환경에서 위 코드의 prevSpinCount는 2000이었다.
아무것도 설정하지 않아도 windows의 critical_section, CRITICAL_SECTION은 Spinlock으로 돈다는 것을 알 수 있었다.
즉, CRITICAL_SECTION의 동작은
0. SpinCount만큼 SpinLock을 돌며 임계 영역 접근을 시도한다.
1. SpinLock 단계에 접근에 실패하면 스레드를 재운다.
이다.
반응형