Глядя на источник digraph.erl, я не вижу никакой дополнительной блокировки.
del_vertex(G, V) ->
do_del_vertex(V, G).
...
do_del_vertex(V, G) ->
do_del_nedges(ets:lookup(G#digraph.ntab, {in, V}), G),
do_del_nedges(ets:lookup(G#digraph.ntab, {out, V}), G),
ets:delete(G#digraph.vtab, V).
Поэтому, когда вы смотрите на орграф с другогоВ процессе вы увидите следующие состояния в зависимости от времени:
- Все до
del_vertex/2
- Некоторые ребра к и от вершины удалены
- Сама вершинаудалено
То же самое происходит с вершиной после вершины для del_vertices/2
.
Если вы хотите больше атомарности, создайте орграф protected
и оберните его на своем собственном сервере, например gen_server
обычно реализуя часть функциональности, которая требует тесного доступа к орграфу.