스레드 프로그래밍 관련 글인 "퓨텍스 없이는 의미 없다 (h4x0r.org)"

https://news.hada.io/topic?id=22642

재미 있네요. futex 라는 것을 처음 알았네요

Claude에 물어보니 Windows에서는 futex와 유사한 기능이 아래와 같다고 합니다.

Windows에서는 futex와 유사한 기능이 WaitOnAddress API 패밀리로 구현되어 있습니다. 이는 Windows 8/Windows Server 2012부터 도입되었습니다.

Windows의 futex 구현

주요 API들:

기본 동작 방식:

// 값이 변경될 때까지 대기
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 등)도 내부적으로 이러한 메커니즘을 활용하여 성능을 크게 개선했습니다.