互锁可变访问与关键部分互锁增量之间的差异
Difference between interlocked variable access AND critical sections interlocked increment
有人能帮助解释c++中互锁变量访问与关键部分互锁增量之间的区别吗?谢谢,非常感谢。
基本上,所有这些InterlockedXXX
函数或多或少都是映射到相对较少(通常是一条)汇编指令的内部函数。这样的操作不能被中断,因此被认为是原子性的(原子性是在CPU级别实现的,至少在目标平台上是可能的)。
CRITICAL_SECTION
是一种同步原语,可以保护较长的段。它确实会锁定,竞争线程将被迫等待,直到线程释放关键部分的所有权。
关键部分是操作系统基元,但它们仅限于单个进程。他们在Windows下的一个关键部分的老大哥是Mutex
,它可以用于跨进程同步。
如果可以,请使用InterlockedXXX
函数(例如,使用完整的关键部分对象来保护单个计数器是没有意义的)。您可能需要提前了解各种原型及其使用情况。许多人使用InterlockedCompareExchange
的关键部分。。。
关键部分是一个锁。InterlockedXxx
函数调用是一个原子操作——没有锁。您可以从另一个角度构建其中一个,但在实践中,它们具有非常不同的性能特征(互锁函数通常更快)。
基本上,互锁功能与关键部分的概念相同,但它们是在硬件中实现的,用于某些操作-锁定、操作、解锁。这可以使它们更快,但限制了它们的适用性。关键部分更通用,但使用关键部分的相对成本更高。他们也有比赛条件和僵局等问题。
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 使用一个考虑到std::map中键值的滚动或换行的键
- 在cuda线程之间共享大量常量数据
- 如何在c++中只将键插入到bimap的一侧
- 在c代码之间共享数据的最佳方式
- 比较它们之间的元素并获取公共值的键
- 确保枚举类型的键/值在软件Revs之间永远不会更改
- 如何使用选项卡键在文本框之间更改焦点
- 两个键之间的键数
- 希望有效地克服 Boost.Process 间共享内存中映射中键类型之间的不匹配
- 击键之间的时间程序 c++
- 如何通过TAB键在窗口中的控件之间导航
- 如果没有for循环,我如何直接找到映射中指向两个不同键的任何两个迭代器之间的元素数量
- 二叉搜索树-值和键之间的区别是什么?
- 查找set和map键之间的set_difference
- 由于访问键和快捷键冲突,Qt4和Qt5之间的更改
- 返回键值在MIN和MAX之间的子映射
- 在映射或unordered_map之间选择由计算的双精度值组成的键
- 在不使用tab键的情况下在Windows Mobile中的对话框控件之间移动