全局long count
计数器。
线程 A 做
EnterCriticalSection(&crit);
// .... do something
count++; // (*1)
// .. do something else
LeaveCriticalSection(&crit);
线程 B 做
InterlockedDecrement(&count); // (*2) not under critical secion.
在 (*1) 处,我处于临界区。在 (*2),我不是。
如果没有 InterlockedIncrement()
,(*1) 安全吗? (它是 protected 临界区)。
我需要 InterlockedIncrement()
在 (*1) 吗?
我觉得我可以赞成也可以反对。
最佳答案
您应该使用一种或另一种,而不是混合使用它们。
虽然 InterlockedDecrement
保证是原子的,但 operator++
不是,尽管在这种情况下它可能取决于您的架构。在这种情况下,您实际上根本没有保护 count
变量。
鉴于您似乎想要执行简单的递增/递减操作,我建议您在这种情况下简单地删除关键部分并使用关联的 Interlocked*
函数。
关于c++ - 棘手的 InterlockedDecrement 与 CriticalSection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6930787/