我有一个多线程应用程序(C++),我需要增加/更改一系列值。 如果我使用一系列互锁操作,它们是否被认为是单个原子操作?像这样的例子:我可以使用互锁操作更新多个值以避免锁定临界区/互斥量吗?
InterlockedIncrement(&value1);
InterlockedIncrement(&value2);
InterlockedExchange(&oldValue, newValue);
或者它会更好地执行同步?就像这样:
EnterCriticalSection(&cs);
value1++;
value2++;
oldValue = newValue;
LeaveCriticalSection(&cs);
我觉得需要一个锁,但我不知道......所有的值是无论是在旧的国家,还是在新的,一起是非常重要的。
要添加到此,请勿直接使用EnterCriticalSection&LeaveCriticalSection,因为如果发生异常,LeaveCriticalSection可能不会被调用。因此,使用CSingleLock类将自动为您锁定和解锁关键部分。 – Naveen 2009-06-12 05:03:34