0

在 Linux 中,futex 具有以下签名 long futex(uint32_t *uaddr, int futex_op, uint32_t val, const struct timespec *timeout),所以我可以说syscall(SYS_futex, &m_address, FUTEX_WAIT_PRIVATE, 1, nullptr);如果 m_address 的值为 1,哪个会暂停当前线程。

我想知道的是如何在 Windows 中执行此操作。

的签名BOOL WaitOnAddress(volatile VOID *Address, PVOID CompareAddress, SIZE_T AddressSize, DWORD dwMilliseconds)。没有价值的选择。我是否必须创建一个具有常量值的变量并将其传递给 CompareAddress 或者我错过了什么?

4

1 回答 1

2

WaitOnAddress 不用作单个调用等待指令,它通常在循环中调用,例如Raymond Chen - 在循环中等待 WaitOnAddress 的辅助模板函数。它也不会在没有额外帮助的情况下唤醒,任何代码更改地址处的字节也必须调用 WakeByAddressSingle 或 WakeByAddressAll 以允许任何活动的 WaitOnAddress 调用返回。

于 2021-02-28T13:57:12.623 回答