有人可以帮助解释c ++中互锁变量访问和关键部分互锁增量之间的区别吗?谢谢,非常感谢,提前。
问问题
3461 次
3 回答
9
基本上,所有这些InterlockedXXX
函数或多或少都是映射到相对较少(通常是一个)汇编指令的内在函数。这样的操作不能被中断,因此被称为原子性的(原子性是在 CPU 级别实现的,至少如果在目标平台上这是可能的)。
ACRITICAL_SECTION
是一种同步原语,可以保护较长的部分。它确实做了一个锁,竞争线程将被迫等待,直到一个线程释放临界区的所有权。
关键部分是操作系统原语,但它们仅限于单个进程。他们的老大哥Windows下的一个临界区是一个Mutex
,可以用于跨进程同步。
如果可以,请使用这些InterlockedXXX
函数(例如,使用完整的临界区对象来保护单个计数器是没有意义的)。您可能想提前了解各种原型及其用法。许多人会使用关键部分InterlockedCompareExchange
...
于 2011-06-24T00:45:11.003 回答
3
临界区是一个锁。函数调用是InterlockedXxx
原子操作——没有锁。您可以根据另一个来构建,但实际上它们具有非常不同的性能特征(互锁功能通常更快)。
于 2011-06-24T00:41:28.307 回答
3
基本上,Interlocked 函数与临界区的概念相同,但它们是在硬件中针对某些操作实现的——锁定、操作、解锁。这可以使它们更快,但限制了它们的适用性。关键部分更加通用,但使用一个的相对成本更高。他们也有竞争条件和死锁等问题。
于 2011-06-24T00:49:14.063 回答