Одним из достоинств неизменяемых структур данных является то, что они автоматически распараллеливаются. Если мутации не происходит, то ссылки на функциональную структуру данных могут передаваться между потоками без какой-либо блокировки.
Я задумался о том, как будут реализованы функциональные структуры данных в c ++. Предположим, что у нас есть счетчик ссылок на каждый узел нашей структуры данных. (Функциональные структуры данных разделяют структуру между старыми и обновленными членами структуры данных, поэтому узлы не будут однозначно принадлежать одной конкретной структуре данных.)
Проблема в том, что если счетчики ссылок обновляются в разных потоках, то наша структура данных больше не является поточно-ориентированной. А присоединение мьютекса к каждому узлу является дорогостоящим и лишает цели использования неизменяемых структур данных для параллелизма.
Есть ли способ заставить параллельные неизменные структуры данных работать в c ++ (и других средах без сбора мусора)?