Здравствуйте, Andrew S, Вы писали:
AS>>>А то, что нормальных interlocked операций там нет? Есть какие-то идиотические Atomic переменные, которые даже не умеют InterlockedExchange, не говоря уж о большем...
E>>
В коде ACE_Atomic_Op для long-а InterlockedExchange как раз используется.
AS>Как атомарно получить предыдущее значение переменной в этом случае? Ведь interlocked функции как раз и нужны для этого. В общем, кг/ам там...
Если у вас есть a и b, которые нужно обменять, то:
typedef ACE_Atomic_Op< ACE_Null_Mutex, long > AtomicLong;
AtomicLong a, b;
std::swap(a, b);
А вообще можно в ACE подкинуть реализацию метода swap для Atomic_Op, ведь это же OpenSource как-никак.