互锁可变访问与关键部分互锁增量之间的差异

Difference between interlocked variable access AND critical sections interlocked increment

本文关键字:之间 键部 访问      更新时间:2023-10-16

有人能帮助解释c++中互锁变量访问与关键部分互锁增量之间的区别吗?谢谢,非常感谢。

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

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

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

如果可以,请使用InterlockedXXX函数(例如,使用完整的关键部分对象来保护单个计数器是没有意义的)。您可能需要提前了解各种原型及其使用情况。许多人使用InterlockedCompareExchange的关键部分。。。

关键部分是一个锁。InterlockedXxx函数调用是一个原子操作——没有锁。您可以从另一个角度构建其中一个,但在实践中,它们具有非常不同的性能特征(互锁函数通常更快)。

基本上,互锁功能与关键部分的概念相同,但它们是在硬件中实现的,用于某些操作-锁定、操作、解锁。这可以使它们更快,但限制了它们的适用性。关键部分更通用,但使用关键部分的相对成本更高。他们也有比赛条件和僵局等问题。