Gra*_*Lup 3 c++ multithreading synchronization interlocked-increment
我有一个多线程应用程序(C++),我需要增加/更改一系列值.如果我使用一系列互锁操作,它们被认为是单个原子操作吗?就像在这个例子中:
InterlockedIncrement(&value1);
InterlockedIncrement(&value2);
InterlockedExchange(&oldValue, newValue);
Run Code Online (Sandbox Code Playgroud)
或者我们更好地锁定以执行同步?像这样:
EnterCriticalSection(&cs);
value1++;
value2++;
oldValue = newValue;
LeaveCriticalSection(&cs);
Run Code Online (Sandbox Code Playgroud)
我认为需要一个锁定,但我不确定......所有的值要么处于旧状态,要么处于新状态,这一点非常重要.
aJ.*_*aJ. 14
InterlockedIncrement 本身是一个原子操作,但系列InterLockedIncrement不是原子的.如果您的要求是获得一系列操作的原子性,那么您可以使用临界区.
| 归档时间: |
|
| 查看次数: |
451 次 |
| 最近记录: |