Re[8]: C/C++ file/process/thread api l/w framework
От: Andrew S Россия http://alchemy-lab.com
Дата: 20.03.08 08:25
Оценка:
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 это сделать стандартными средствами нельзя — просто отстой, на мой взгляд. Не может нормальная библиотека иметь такую лажу прямо на поверхности.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.