我有一个多线程应用程序 (C++),我需要在其中增加/更改一系列值。
如果我使用一系列互锁操作,它们是否被视为单个原子操作?就像在这个例子中:

InterlockedIncrement(&value1);
InterlockedIncrement(&value2);
InterlockedExchange(&oldValue, newValue);

或者最好给我们一个锁来执行同步?像这样:
EnterCriticalSection(&cs);
value1++;
value2++;
oldValue = newValue;
LeaveCriticalSection(&cs);

我认为需要锁,但我不确定......所有值都处于旧状态或新状态非常重要。

最佳答案

InterlockedIncrement 本身是一个原子操作,但一系列 InterLockedIncrement 不是原子的。如果您的要求是获得一系列操作的原子性,那么您可以使用临界区。

关于c++ - 我可以使用互锁操作来更新多个值以避免锁定临界区/互斥锁吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/983305/

10-11 22:33
查看更多