스레드 프로그래밍 관련 글인 "퓨텍스 없이는 의미 없다 (h4x0r.org)"
https://news.hada.io/topic?id=22642
재미 있네요. futex 라는 것을 처음 알았네요
Claude에 물어보니 Windows에서는 futex와 유사한 기능이 아래와 같다고 합니다.
Windows에서는 futex와 유사한 기능이 WaitOnAddress API 패밀리로 구현되어 있습니다. 이는 Windows 8/Windows Server 2012부터 도입되었습니다.
주요 API들:
WaitOnAddress() - 특정 메모리 주소의 값이 변경될 때까지 대기WakeByAddressSingle() - 해당 주소에서 대기 중인 스레드 하나를 깨움WakeByAddressAll() - 해당 주소에서 대기 중인 모든 스레드를 깨움기본 동작 방식:
// 값이 변경될 때까지 대기
BOOL WaitOnAddress(
volatile VOID* Address, // 모니터링할 메모리 주소
PVOID CompareAddress, // 비교할 값
SIZE_T AddressSize, // 주소 크기 (1, 2, 4, 8 바이트)
DWORD dwMilliseconds // 타임아웃
);
// 대기 중인 스레드들을 깨움
VOID WakeByAddressSingle(PVOID Address);
VOID WakeByAddressAll(PVOID Address);
이 API들은 Linux의 futex와 거의 동일한 개념으로 사용자 공간에서 빠른 락을 구현할 수 있게 해줍니다. 경합이 없을 때는 순수한 사용자 공간 연산만으로 처리하고, 경합이 발생했을 때만 커널의 도움을 받아 스레드를 대기/깨우기 상태로 전환합니다.
Windows의 표준 동기화 객체들(Critical Section, SRW Lock 등)도 내부적으로 이러한 메커니즘을 활용하여 성능을 크게 개선했습니다.