我有一个多线程应用程序 (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/