Size: a a a

2020 November 18

MS

Mikola Summer Duck in pro.algorithms
Александр Караев
не уловил, зачем атомарность.
мне фактически хватит std::shared_ptr<const std::function<void()>>
А, а в чём вопрос тогда?
источник

АК

Александр Караев... in pro.algorithms
Mikola Summer Duck
А, а в чём вопрос тогда?
я итерируюсь по множеству функций, вызывая их.
вызов функции может привести к удалению/добавлению новой функции в множество
источник

MS

Mikola Summer Duck in pro.algorithms
Атомарные указатели можно собственно атомарно занулить, что позволит тебе итерироваться по вектору коллбеков ничего не лоча.
источник

АК

Александр Караев... in pro.algorithms
понял, это решает проблему удаления, но остаётся добавление
источник

АК

Александр Караев... in pro.algorithms
сейчас пришла в голову мысль о atomic<shared_ptr<const vector<function>>> с copy-on-write семантикой.
при начале итерации просто копирую указатель, если хочу что-то добавить или удалить - делаю копию

одна индирекция в самом начале, всё последовательно в памяти, а если функторы не ушли в кучу, то и жизнь удалась
источник

MS

Mikola Summer Duck in pro.algorithms
Александр Караев
понял, это решает проблему удаления, но остаётся добавление
Ну смотри
источник

MS

Mikola Summer Duck in pro.algorithms
В случае если вектор имеет зануленные (ранее удалённые) коллбеки, ты можешь находить их линейным поиском и сетить.
источник

MS

Mikola Summer Duck in pro.algorithms
Если линейный поиск по вектору указателей дорого (тысячи их), хранишь битмапу свободных/занятых.
источник

АК

Александр Караев... in pro.algorithms
Mikola Summer Duck
В случае если вектор имеет зануленные (ранее удалённые) коллбеки, ты можешь находить их линейным поиском и сетить.
я ж говорю - с удалёнными проблем нет, занулил и потом удалю, как будет подходящий момент. проблема с тем, что во время итерации может произойти push_back
источник

MS

Mikola Summer Duck in pro.algorithms
Да, я вот пишу про второй случай.
источник

MS

Mikola Summer Duck in pro.algorithms
Тут есть два варианта на самом деле.
источник

MS

Mikola Summer Duck in pro.algorithms
Хотя в обоих придётся забыть о векторах и велосипедить.
источник

АК

Александр Караев... in pro.algorithms
я вижу вариант на векторах - складывать новоприбывших в соседний вектор и потом их мержить, но это велосипеды
источник

MS

Mikola Summer Duck in pro.algorithms
Александр Караев
я вижу вариант на векторах - складывать новоприбывших в соседний вектор и потом их мержить, но это велосипеды
Тогда придётся лочить, а ты ж хочешь локфри.
источник

MS

Mikola Summer Duck in pro.algorithms
Ну, я хочу чтоб ты хотел локфри потому что это интересно 😁
источник

АК

Александр Караев... in pro.algorithms
я хочу решить задачу, а не локфри))
источник

MS

Mikola Summer Duck in pro.algorithms
Александр Караев
я хочу решить задачу, а не локфри))
Ну твою задачу можно решить тремя векторами, действительно.
источник

АК

Александр Караев... in pro.algorithms
Александр Караев
сейчас пришла в голову мысль о atomic<shared_ptr<const vector<function>>> с copy-on-write семантикой.
при начале итерации просто копирую указатель, если хочу что-то добавить или удалить - делаю копию

одна индирекция в самом начале, всё последовательно в памяти, а если функторы не ушли в кучу, то и жизнь удалась
а что насчёт этого?
источник

MS

Mikola Summer Duck in pro.algorithms
Вопрос в дополнительных констрейнтах.
источник

MS

Mikola Summer Duck in pro.algorithms
Александр Караев
а что насчёт этого?
Ну это массив мютексов лочащих структуры с мютексами.
источник