multithreading - 警告 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
}
我真的很抱歉表达很差。
解决方案
推荐阅读
- python-3.x - 无法使用 bs4 提取 Web 表格数据
- reactjs - 如何为匿名函数设置道具验证
- swift - 即使我的默认浏览器不是在 macOS 中使用 Swift 的 Safari,如何在 Safari 中打开 url?
- reactjs - 如何使用 Next Js useRouter 在不刷新到下一页的情况下更改 url?
- python - 有没有办法在colab中扫描二维码?
- excel - Excel隐藏列
- ios - 使用 UICollectionView 为单元格加载不同的高度
- c++ - 如何在 C++ 中将数字添加到字符串的末尾?
- jquery - jQuery - onClick 获取此属性 id 的等于变量 html 的内容
- azure - 我可以关闭 Azure 应用服务以节省 azure 的成本吗?