Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C++0X atomic, асинхронное удаление из lock_free stack 
:(
    Опции темы
Леопольд
Дата 9.12.2010, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Да уж. При помощи одной только CAS не получается оbойти ABA, только если опять же вставлять очередь оbратно. LL/SC могло bы спасти.


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
azesmcar
Дата 9.12.2010, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Леопольд @  9.12.2010,  21:35 Найти цитируемый пост)
. При помощи одной только CAS не получается оbойти ABA

Надо  добавить счетчик, но std::atomic для пользовательских типов не реализован, можно через std::atomic<long long>, в первых 4-х байтах хранить адрес, в остальных четырех счетчик.

Добавлено через 2 минуты и 17 секунд
или надо алгоритм составить так, чтобы проблемы не возникало.
PM   Вверх
Леопольд
Дата 10.12.2010, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Цитата(azesmcar @  9.12.2010,  21:47 Найти цитируемый пост)
в первых 4-х байтах хранить адрес
Это только для 32 битных платформ сойдёт.

Цитата(azesmcar @  9.12.2010,  21:47 Найти цитируемый пост)
или надо алгоритм составить так, чтобы проблемы не возникало. 
Придётся. В общем, мало одной только CAS. Надо бы ещё и LL/SC на всех архитектурах реализовать. smile
Или нужен сборщик мусора. Вроде как хотят его добавить в С++...


Это сообщение отредактировал(а) Леопольд - 10.12.2010, 11:24


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Леопольд
Дата 10.12.2010, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



deleted

Это сообщение отредактировал(а) Леопольд - 10.12.2010, 11:40


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
azesmcar
Дата 10.12.2010, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Леопольд @  10.12.2010,  11:23 Найти цитируемый пост)
Это только для 32 битных платформ сойдёт.

Ну я писал, что это непереносимо, но тебе все равно для тестов, так что сойдет smile 

Цитата(Леопольд @  10.12.2010,  11:23 Найти цитируемый пост)
Придётся. В общем, мало одной только CAS. Надо бы ещё и LL/SC на всех архитектурах реализовать. 

Почему же, в алгоритме, описанном в статье этой проблемы нет.
PM   Вверх
azesmcar
Дата 10.12.2010, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Леопольд @  10.12.2010,  11:23 Найти цитируемый пост)
Или нужен сборщик мусора. Вроде как хотят его добавить в С++..

Цитата

Garbage collection: For C++0x, we're not going to add explicit support for garbage collection, and only intend to find ways to remove blocking issues like pointer hiding that make it difficult to add garbage collection in a C++ implementation. In particular, the scope of this feature is expected to be constrained as follows:

http://herbsutter.com/2007/11/01/trip-repo...ndards-meeting/
PM   Вверх
Леопольд
Дата 10.12.2010, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Цитата(azesmcar @  10.12.2010,  13:52 Найти цитируемый пост)
Почему же, в алгоритме, описанном в статье этой проблемы нет. 
Зато там довольно накладная очистка памяти, которая может свести на нет всю предполагаемую выгоду от lock free. В невытесняющей многозадачности, при определённой нагрузке, спин лок bудет гораздо bыстрее. Вот если bы везде bыла доступна связка LL/SC или DСAS, а лучше и то и другое и третье. 
Иначе это как программировать GUI имея в арсенале только bинарные операции. Ничего удивительного что для двусвязного списка не придумали алгоритм, недостаточно доступных средств. В оbщем, надо подождать... smile

Про сbорщик мусора, видимо, здесь на глаза попадалось.
http://www2.research.att.com/~bs/C++0xFAQ.html#gc-abi


Это сообщение отредактировал(а) Леопольд - 10.12.2010, 22:40


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
azesmcar
Дата 10.12.2010, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Леопольд @  10.12.2010,  21:49 Найти цитируемый пост)
Зато там довольно накладная очистка памяти, которая может свести на нет всю предполагаемую выгоду от lock free

в твоем варианте тоже, вся проблема в том, что очистка происходит только тогда, когда в функции pop нет других потоков, что в случае высокой нагрузки маловероятно. Альтернатива есть, но решение не такое простое. Почитай у Maged Michael-а про Hazard Pointers.

Цитата(Леопольд @  10.12.2010,  21:49 Найти цитируемый пост)
Ничего удивительного что для двусвязного списка не придумали алгоритм, недостаточно доступных средств

все только начинается...


Это сообщение отредактировал(а) azesmcar - 10.12.2010, 23:16
PM   Вверх
Леопольд
Дата 11.12.2010, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Цитата(azesmcar @  10.12.2010,  22:59 Найти цитируемый пост)
в твоем варианте тоже
Я пытался обойти тот момент, когда очередь полностью обходится только для того, что-бы поместить все элементы обратно. Если бы под рукой оказались ll/SC то могло получиться.



--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0662 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.