| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > lock-free queues |
| Автор: J0ker 8.4.2009, 22:16 | ||
| народ проверьте пжалста - нигде я тут не напортачил
|
| Автор: J0ker 8.4.2009, 22:27 | ||||||
спасибо за информацию - потом поправлю но прежде всего проверьте логику Добавлено через 7 минут и 7 секунд
вы не совсем поняли логику создается овый нод, после чего атомарно берется текущий хвост (помещается в tmp) и указаталь на хвост заменяется новым нодом если в этот момент произойдет повторный вход в push, то следующий нод будет рисоединен к этому в любом случае |
| Автор: Lazin 8.4.2009, 22:54 | ||||
вот как я это вижу
ты прав, должно работать Добавлено через 4 минуты и 48 секунд вроде-бы ничего не смущает, должно работать |
| Автор: Lazin 8.4.2009, 23:20 | ||||
мне кажется возможным такой вариант, первый поток входит в push, изменяет tail_ и сохраняет его старое значение в tmp второй поток входит в push и делает то-же самое, изменяет tail_ и сохраняет в tmp значение которое туда записал другой поток первый поток просыпается и записывает в tmp->next новое значение tail_, а не то, которое он туда установил второй поток просыпается и записывает в свой tmp->next (tmp - нод созданый первым потоком, на который никто не указывает в данный момент) указатель на tail_ (тот-же tail_ что и у первого потока) в результате - утечка памяти |
| Автор: J0ker 9.4.2009, 00:13 | ||||||||
о блин точно непрально выразил мысль должно быть так:
|
| Автор: Lazin 9.4.2009, 08:33 | ||||
так будет работать, никаких проблем я не вижу Добавлено через 2 минуты и 28 секунд хотя. можно сделать и mpmc_queue tbb::concurrent_queue позволяет читать и записывать многим потокам одновременно, может не стоит изобретать свой вид транспрота а использовать threading building blocks? |
| Автор: J0ker 9.4.2009, 15:49 | ||
да, возможно добавлю - пока мне это не актуально
это я смотрел во-первых коммерческая лицензия у них 300 баксов а во-вторых у них очередь локирующая - они мотивируют это тем, что во-первых такой нагрузки на очередь, что-бы лак сказывался на производительности все равно не бывает, т.к. очереди обычно присутствуют там, где есть IO; а во-вторых у консьюмера все равно будет либо беспробудный пулинг, либо нужен сторонний механизм нотификации, который сам по себе меет всегда локирующую природу они, конечно, правы, но мне больше нравятся красивые решения, а не красивые отмазки |
| Автор: Lazin 9.4.2009, 16:30 | ||
в коммерческих проектах можно использовать и бесплатную версию, к тому-же 300$ не особо крупная сумма Добавлено через 1 минуту и 32 секунды
просто там намного больше возможностей (к примеру определение размера очереди), но если эти возможности не нужны, то можно вполне обойтись и "красивым" решением |