私は、一連の値を増減する必要があるマルチスレッドアプリケーション(C++)を持っています。 一連の連動操作を使用する場合、それらは単一のアトミック操作と見なされますか?この例のように:連動した操作を使用して複数の値を更新し、クリティカルセクション/ミューテックスをロックすることはできませんか?
InterlockedIncrement(&value1);
InterlockedIncrement(&value2);
InterlockedExchange(&oldValue, newValue);
また、同期を実行するためのロックが良いでしょうか?このように:
EnterCriticalSection(&cs);
value1++;
value2++;
oldValue = newValue;
LeaveCriticalSection(&cs);
私はロックが必要とされると思いますが、私はわからないんだけど...それはすべての値が一緒に、古い状態で、または新しいもののいずれかであることをすることが非常に重要です。
これに加えて、例外の場合にLeaveCriticalSectionが呼び出されない可能性があるため、EnterCriticalSection&LeaveCriticalSectionを直接使用しないでください。したがって、自動的にあなたのためにクリティカルセクションをロックし、ロックを解除するクラスCSingleLockを使用してください。 – Naveen