Windows 下 cv.wait 估计是调用 SleepConditionVariableSRW,可以参考一下 ReactOS 的实现 https://doxygen.reactos.org/da/d99/condvar_8c_source.html
RtlSleepConditionVariableSRW 是直接调用 InternalSleep 的,而 InternalSleep 则是通过调用 NtWaitForKeyedEvent 来等待的,结论是用了内核提供的机制。
Linux 下 cv.wait 估计是调用 pthread_cond_wait,可以参考各类 pthread 的实现,为了代码更加简单,这里选择参考 musl (下面的 GitHub 仓库是一个非官方的 musl mirror,用 GitHub 只是为了方便搜索)
pthread_cond_wait 是直接调用 pthread_cond_timedwait 的 https://github.com/ifduyue/musl/blob/0b0640219338b80cf47026d1970b5503414ed7f3/src/thread/pthread_cond_wait.c
pthread_cond_timedwait 是通过 __timedwait_cp 来等待的 https://github.com/ifduyue/musl/blob/0b0640219338b80cf47026d1970b5503414ed7f3/src/thread/pthread_cond_timedwait.c#L100
而 __timedwait_cp 则是通过 futex syscall 来等待的 https://github.com/ifduyue/musl/blob/0b0640219338b80cf47026d1970b5503414ed7f3/src/thread/__timedwait.c#L52
结论也是用了内核提供的机制。