-
CRITICAL_SECTION의 default spin count프로그래밍/의문 2019. 4. 10. 01:24반응형
CRITICAL_SECTION cs; InitializeCriticalSection(&cs); DWORD prevSpinCount = SetCriticalSectionSpinCount(&cs, 1000);
SetCriticalSectionSpinCount는 파라미터인 CriticalSection의 SpinCount를 수정하고, 이전의 SpinCount 값을 반환한다.
vs2019 release, x64, Windows10 환경에서 위 코드의 prevSpinCount는 2000이었다.
아무것도 설정하지 않아도 windows의 critical_section, CRITICAL_SECTION은 Spinlock으로 돈다는 것을 알 수 있었다.
즉, CRITICAL_SECTION의 동작은
0. SpinCount만큼 SpinLock을 돌며 임계 영역 접근을 시도한다.
1. SpinLock 단계에 접근에 실패하면 스레드를 재운다.
이다.
반응형'프로그래밍 > 의문' 카테고리의 다른 글
할당한 메모리가 working set에 잡히지 않던 현상 (0) 2019.04.23 boost asio 사용 시 win32 버전을 지정하지 않으면 io_context::run이 빠져나가는 현상 (0) 2019.04.14 C# Excel Application이 예외 발생 시 종료되지 않는 현상 (0) 2019.03.31 암호화 라이브러리 간 차이 때문에 암호화 결과가 달랐던 경우 (0) 2018.11.12 윈도우 openssl OPENSSL_Uplink(00007FFBDEE003D8,08): no OPENSSL_Applink 에러 (0) 2018.11.01