Самый простой способ сделать это - защитить все дерево с помощью ReaderWriterLockSlim .Это позволяет одновременный доступ нескольких читателей или эксклюзивный доступ одним автором.Любой метод, который каким-либо образом изменит структуру, должен будет получить блокировку записи, и никаким другим потокам не будет разрешено чтение или запись в структуру, пока этот поток не снимет блокировку записи.
Любой поток, который хочетЧтобы прочитать структуру, необходимо получить блокировку чтения.Несколько читателей могут получить блокировку чтения одновременно, но если поток хочет получить блокировку записи - это означает ожидание, пока все существующие блокировки чтения не будут сняты.
Возможно, существует способ сделать эту структуру данных блокированной.свободно.Однако сделать это может быть довольно сложно.Блокировка чтения / записи даст вам необходимую функциональность, и я подозреваю, что она будет достаточно быстрой.
Если вы хотите поделиться этим между процессами, это другая история.ReaderWriterLockSlim
не работает между процессами.Однако вы можете реализовать нечто подобное, используя комбинацию примитивов синхронизации, или создать драйвер устройства (или службу), который обслуживает запросы, тем самым сохраняя все это в одном процессе.