首页 > 解决方案 > 警告 C28112:通过互锁函数访问的变量必须始终通过互锁函数访问

问题描述

我收到这个“警告 C28112:通过互锁函数访问的变量必须始终通过互锁函数访问。” 将通过互锁函数访问的共享变量的地址传递给 WakeByAddressSingle 时。

我理解句子“通过互锁函数访问的变量必须始终通过互锁函数访问”的含义。

我的问题是,那我如何使用由联锁函数访问的这个变量呢?

情况如下。

有两个线程 0 和 1。线程 0 等待或在线程 1 发出信号时开始。我想要做的是使用 WaitOnAddress 而不是 WaitForSingleObject。

这些是参考。

https://devblogs.microsoft.com/oldnewthing/20160823-00/?p=94145

https://devblogs.microsoft.com/oldnewthing/20170615-00/?p=96396

short g_sSharedVariable = 0i16;
short g_sCompare = 0i16;

线程 0

while (true)
{
    int nWaitResult = WaitOnAddress(&g_sSharedVariable, &g_sCompare, sizeof(short), INFINITE);
    ...
}

线程 1

while (true)
{
    ...
    sReturn = InterlockedExchange16(&g_sSharedVariable, 1i16);
    WakeByAddressSingle(&g_sSharedVariable);  // warning C28112
}

我真的很抱歉表达很差。

标签: multithreadingsynchronizationwarningsinterlocked

解决方案


推荐阅读