Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > C++0x - атомарные операции |
Автор: azesmcar 14.2.2011, 14:38 | ||||
Атомарные операции C++0x - довольно интересное нововведение, которое к сожалению на данный момент поддерживается только компилятором gcc, да и то только под *nix, что делает использование атомарных типов и операций C++0x в windows практически невозможным. Даже последняя версия Visual Studio 2010 не имеет их поддержки. Я решил исправить это недоразумение, посвятив свободное от работы и отдыха время проекту http://www.data-race.com/projects/. Исходники открыты и распространяются под лицензией GPL, язык написания assembler и естественно C++. На данный момент поддерживается только компилятор Visual Studio и платформа x86-32. Сейчас реализовано далеко не все, но многое уже есть. О багах прошу сообщать лично мне ![]() пример использования
еще один пример (алгоритм Петерсона)
|
Автор: GoldFinch 14.2.2011, 15:38 |
а почему бы не разместить ее на каком-нить code.google.com или bitbucket.org ? |
Автор: GoldFinch 14.2.2011, 15:57 |
также есть пожелание засунуть _impl сущности в namespace impl (или detail) и завернуть классы содержащие асм вставки в #pragma managed(push, off) / #pragma managed(pop) чтобы можно было скомпилить с /clr без предупреждений. и вообще желательно чтобы можно было компилить с /W4 /WX |
Автор: bsa 14.2.2011, 17:31 |
Если не секрет, почему используется memcpy вместо конструктора копирования и оператора присваивания, а memcmp вместо сравнения (это же не будет работать с не-POD типами)? И почему нельзя использовать std::swap внутри atomic_impl::exchange? Добавлено через 7 минут и 9 секунд Кстати, azesmcar, у тебя ссылка на форум неисправная. |
Автор: azesmcar 14.2.2011, 17:40 |
а этого и не требуется, стандарт требует, чтобы тип был тривиально копируемым. В принципе можно ![]() спасибо. сейчас подправлю. |
Автор: azesmcar 14.2.2011, 18:38 |
обновил. избавился от memcpy, оставил только memcmp. Надо придумать, как поставить assert на НЕ pod-ы. |
Автор: GoldFinch 14.2.2011, 18:52 | ||
|
Автор: azesmcar 14.2.2011, 18:59 |
про это знаю ![]() но он есть только в VS2010. Если быть точнее, нужна проверка не на POD а на trivialy copyable. |
Автор: boostcoder 14.2.2011, 19:10 |
и в gcc |
Автор: azesmcar 14.2.2011, 19:12 |
Имелось ввиду из серии MSVC, так-как библиотека поддерживает только компилятор эти компиляторы (во всяком случае пока). |
Автор: boostcoder 14.2.2011, 19:14 | ||
это?:
Добавлено через 36 секунд о как |
Автор: azesmcar 14.2.2011, 19:16 |
boostcoder да. |
Автор: azesmcar 18.2.2011, 10:47 |
bsa Вспомнил почему делал через memcpy ![]() Для безопасности исключений. Оператор = может сгенерировать исключение, которое не должно генерироваться в функциях exchange, store и load. |
Автор: bsa 18.2.2011, 13:26 |
azesmcar, по идее, это не актуально для "тривиальных" типов. А для "нетривиальных" использовать и memcpy недопустимо. |
Автор: azesmcar 18.2.2011, 13:41 | ||||
По идее да, но например такой тип
вполне рабочий, но в данном случае его оператор присваивания может все испортить (как исключениями, так и семантикой присваивания). |