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