作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个多线程应用程序 (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/
我是一名优秀的程序员,十分优秀!