lock-free append?
Как?
Атомарный инкремент Len и запись по индексу. Но тут важно не вылететь за границы. А, и Len <= Cap
Что составляет большую часть того, что делает append. Может, вам просто массив нужен?
И переизобретать слайс?
Вы не используете слайс же
мы хотим в него докинуть 200 значений
Я всё-таки про другой сценарий, когда все аллокации только на старте.
Ок. Даже если так. Как читать элементы из массива? То что len > 0, не означает что в массиве есть записанные элементы
А в чём проблема?
Проблема в том, что три горутины пытается сделать append по вашему алгоритму. Все три успевают только атомарно увеличить len и планировщик их паркует. Четвертая горутина видит что размер слайса равен трем. Может он начинать читать?
Ой. А зачем потокобезопасный слайс понадобился?
@pragus предложил lock-free append
А какую задачу он решает?
Незачем. В очень редких ситуациях может понадобиться делать append в преаллоцированный слайс.
Мммм... можно пример кейса коротко?
Ты что-то параллельно процессишь и тебе не важен порядок результатов и их количество заранее неизвестно. В принципе, можно обойтись атомарным счётчиком и индексами, а не городить атомарный append :)
Обсуждают сегодня