![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Да уж. При помощи одной только CAS не получается оbойти ABA, только если опять же вставлять очередь оbратно. LL/SC могло bы спасти.
-------------------- вопросов больше чем ответов |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Надо добавить счетчик, но std::atomic для пользовательских типов не реализован, можно через std::atomic<long long>, в первых 4-х байтах хранить адрес, в остальных четырех счетчик. Добавлено через 2 минуты и 17 секунд или надо алгоритм составить так, чтобы проблемы не возникало. |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Это только для 32 битных платформ сойдёт.
Придётся. В общем, мало одной только CAS. Надо бы ещё и LL/SC на всех архитектурах реализовать. Или нужен сборщик мусора. Вроде как хотят его добавить в С++... Это сообщение отредактировал(а) Леопольд - 10.12.2010, 11:24 -------------------- вопросов больше чем ответов |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
deleted
Это сообщение отредактировал(а) Леопольд - 10.12.2010, 11:40 -------------------- вопросов больше чем ответов |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
http://herbsutter.com/2007/11/01/trip-repo...ndards-meeting/ |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Зато там довольно накладная очистка памяти, которая может свести на нет всю предполагаемую выгоду от lock free. В невытесняющей многозадачности, при определённой нагрузке, спин лок bудет гораздо bыстрее. Вот если bы везде bыла доступна связка LL/SC или DСAS, а лучше и то и другое и третье.
Иначе это как программировать GUI имея в арсенале только bинарные операции. Ничего удивительного что для двусвязного списка не придумали алгоритм, недостаточно доступных средств. В оbщем, надо подождать... Про сbорщик мусора, видимо, здесь на глаза попадалось. http://www2.research.att.com/~bs/C++0xFAQ.html#gc-abi Это сообщение отредактировал(а) Леопольд - 10.12.2010, 22:40 -------------------- вопросов больше чем ответов |
|||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
в твоем варианте тоже, вся проблема в том, что очистка происходит только тогда, когда в функции pop нет других потоков, что в случае высокой нагрузки маловероятно. Альтернатива есть, но решение не такое простое. Почитай у Maged Michael-а про Hazard Pointers.
все только начинается... Это сообщение отредактировал(а) azesmcar - 10.12.2010, 23:16 |
||||
|
|||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Я пытался обойти тот момент, когда очередь полностью обходится только для того, что-бы поместить все элементы обратно. Если бы под рукой оказались ll/SC то могло получиться.
-------------------- вопросов больше чем ответов |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |