有人能帮助解释c++中互锁变量访问与关键部分互锁增量之间的区别吗?谢谢,非常感谢。
基本上,所有这些InterlockedXXX
函数或多或少都是映射到相对较少(通常是一条)汇编指令的内部函数。这样的操作不能被中断,因此被认为是原子性的(原子性是在CPU级别实现的,至少在目标平台上是可能的)。
CRITICAL_SECTION
是一种同步原语,可以保护较长的段。它确实会锁定,竞争线程将被迫等待,直到线程释放关键部分的所有权。
关键部分是操作系统基元,但它们仅限于单个进程。他们在Windows下的一个关键部分的老大哥是Mutex
,它可以用于跨进程同步。
如果可以,请使用InterlockedXXX
函数(例如,使用完整的关键部分对象来保护单个计数器是没有意义的)。您可能需要提前了解各种原型及其使用情况。许多人使用InterlockedCompareExchange
的关键部分。。。
关键部分是一个锁。InterlockedXxx
函数调用是一个原子操作——没有锁。您可以从另一个角度构建其中一个,但在实践中,它们具有非常不同的性能特征(互锁函数通常更快)。
基本上,互锁功能与关键部分的概念相同,但它们是在硬件中实现的,用于某些操作-锁定、操作、解锁。这可以使它们更快,但限制了它们的适用性。关键部分更通用,但使用关键部分的相对成本更高。他们也有比赛条件和僵局等问题。