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