c++ - 互锁变量访问和临界区互锁增量之间的区别

标签 c++ winapi critical-section interlocked-increment

有人可以帮助解释 C++ 中的互锁变量访问和临界区互锁增量之间的区别吗?谢谢,非常感谢,提前。

最佳答案

基本上,所有这些 InterlockedXXX 函数或多或少都是映射到相对较少(通常是一条)汇编指令的内部函数。这样的操作不能被中断,因此被称为原子性的(原子性是在 CPU 级别实现的,至少如果这在目标平台上是可能的)。

CRITICAL_SECTION 是一种可以保护较长部分的同步原语。它确实会锁定并且竞争线程将被迫等待,直到线程释放临界区的所有权。

关键部分是操作系统原语,但它们仅限于单个进程。他们在Windows下临界区的老大哥是一个Mutex,可以用来跨进程同步。

如果可以,请使用InterlockedXXX 函数(例如,使用完整的临界区对象来保护单个计数器是没有意义的)。您可能想提前查看各种原型(prototype)及其用法。许多人使用临界区,而 InterlockedCompareExchange 会做...

关于c++ - 互锁变量访问和临界区互锁增量之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6462141/

相关文章:

c++ - 在基于范围的 for 循环中将元素添加到该 vector 上的预分配 vector 是否合法?

c++ - 在 C++ 中重载 == 和 != 运算符

c++ - 在图片控件中使用 SS_REALSIZECONTROL 时出现语法错误

C++:如何以编程方式在 Windows 凭据管理器中创建本地用户登录凭据,以便 "runas/savecred"可以使用它?

关键部分示例 - 它有效吗?

synchronization - Windows 2003 SP1 中的关键部分行为更改

multithreading - 我是否需要一个关键部分来获取字符串列表中值的索引?

c++ - 在类中包装 Windows 句柄

c++ - 计算对象实例的最简单方法

c++ - 我如何在基于消息队列的Windows应用程序上使用谷歌测试?