![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Атомарные операции C++0x - довольно интересное нововведение, которое к сожалению на данный момент поддерживается только компилятором gcc, да и то только под *nix, что делает использование атомарных типов и операций C++0x в windows практически невозможным. Даже последняя версия Visual Studio 2010 не имеет их поддержки. Я решил исправить это недоразумение, посвятив свободное от работы и отдыха время проекту C++0x atomics.
Исходники открыты и распространяются под лицензией GPL, язык написания assembler и естественно C++. На данный момент поддерживается только компилятор Visual Studio и платформа x86-32. Сейчас реализовано далеко не все, но многое уже есть. О багах прошу сообщать лично мне ![]() пример использования
еще один пример (алгоритм Петерсона)
Это сообщение отредактировал(а) azesmcar - 14.2.2011, 15:15 |
||||
|
|||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
а почему бы не разместить ее на каком-нить code.google.com или bitbucket.org ?
|
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
также есть пожелание засунуть _impl сущности в namespace impl (или detail)
и завернуть классы содержащие асм вставки в #pragma managed(push, off) / #pragma managed(pop) чтобы можно было скомпилить с /clr без предупреждений. и вообще желательно чтобы можно было компилить с /W4 /WX |
|||
|
||||
azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
пока не вижу смысла, позже скорее всего так и поступлю.
ага..забыл все таки... ![]()
ок. подправил слегка. добавил все вышеописанное, исходники обновил. |
||||||
|
|||||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Если не секрет, почему используется memcpy вместо конструктора копирования и оператора присваивания, а memcmp вместо сравнения (это же не будет работать с не-POD типами)? И почему нельзя использовать std::swap внутри atomic_impl::exchange?
Добавлено через 7 минут и 9 секунд Кстати, azesmcar, у тебя ссылка на форум неисправная. |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
а этого и не требуется, стандарт требует, чтобы тип был тривиально копируемым. В принципе можно ![]() спасибо. сейчас подправлю. Это сообщение отредактировал(а) azesmcar - 14.2.2011, 18:49 |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
обновил.
избавился от memcpy, оставил только memcmp. Надо придумать, как поставить assert на НЕ pod-ы. |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
||||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
это?:
Добавлено через 36 секунд о как |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
boostcoder
да. |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
bsa
Вспомнил почему делал через memcpy ![]() Для безопасности исключений. Оператор = может сгенерировать исключение, которое не должно генерироваться в функциях exchange, store и load. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
azesmcar, по идее, это не актуально для "тривиальных" типов. А для "нетривиальных" использовать и memcpy недопустимо.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |