Может быть функциональные / неизменные структуры данных по-прежнему полезны для параллелизма в небьищем собранном контексте?

Одним из точек продажи неизменных структур данных заключается в том, что они автоматически параллелизируются. Если мутация не продолжается, то ссылки на функциональную структуру данных могут быть переданы между потоками без какого-либо блокировки.

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

Проблема в том, что если значение ссылки обновляются в разных потоках, то наша структура данных больше не будет безопасным потоком. И прикрепление мьютекса к каждому узлу - это как дороги, и поражает цель использования неизменных структур данных для параллелизма.

Есть ли способ сделать одновременные неизменные структуры данных в C ++ (и других собранных средах без мусора)?

10
задан Rob Lachlan 31 August 2011 в 06:43
поделиться