Ну, я подумал, что я буду умен и найду несколько ключевых слов, чтобы найти литературу. Первый результат ... был этот вопрос.
Так что на эту тему не так уж много! Интересно. Просто думал, что поделюсь.
Эйден Белл и DFA дали очень подробные ответы, поэтому я не буду пытаться их опередить. :) Но я сделаю одно замечание, касающееся качества DAG графика и одновременного доступа для записи. Возможно, это уже произошло с вами, но эй. :)
Вы можете разрешить одновременные потоки, не беспокоясь о перезаписи изменений другого, просто предполагая, что узел , в котором постоянно находится записывающий поток, и все дочерние элементы этого узла "заблокированы". этим конкретным потоком письма . Я считаю, что проще всего визуализировать это с помощью дерева (которое также является DAG, очевидно). Любой поток записи в основном заблокировал определенное поддерево, но теперь мы можем сказать, что любые дочерние деревья или любые узлы-предки доступны для записи.
Более сложный DAG (где у узла может быть несколько родителей, в частности) будет, по сути, иметь много перекрывающихся поддеревьев, и поэтому может быть не так много свободы, но правило все еще применяется: любой узел, который не заселен или является дочерним узлом, населенным потоком записи, может считаться разрешенным для записи.
Очевидно, что может быть много причин, по которым приведенная выше идея бесполезна, но если несколько потоков записи часто уходят в «разные» направления, это может ослабить некоторые требования, необходимые для обеспечения поточной безопасности.
Надеюсь, это поможет!
-Agor