Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Tiago Peixoto
graph-tool
Commits
0dcf00ff
Commit
0dcf00ff
authored
Nov 21, 2013
by
Tiago Peixoto
Browse files
Fix race condition in betweenness() with openmp enabled
parent
90b1e76d
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/boost-workaround/boost/graph/betweenness_centrality.hpp
View file @
0dcf00ff
...
...
@@ -342,29 +342,32 @@ namespace detail { namespace graph {
shortest_paths
(
g
,
s
,
ordered_vertices
,
incoming
,
distance
,
path_count
,
vertex_index
);
while
(
!
ordered_vertices
.
empty
())
#pragma omp critical
{
vertex_descriptor
u
=
ordered_vertices
.
top
();
ordered_vertices
.
pop
();
typedef
typename
property_traits
<
IncomingMap
>::
value_type
incoming_type
;
typedef
typename
incoming_type
::
iterator
incoming_iterator
;
typedef
typename
property_traits
<
DependencyMap
>::
value_type
dependency_type
;
for
(
incoming_iterator
vw
=
incoming
[
u
].
begin
();
vw
!=
incoming
[
u
].
end
();
++
vw
)
{
vertex_descriptor
v
=
source
(
*
vw
,
g
);
dependency_type
factor
=
dependency_type
(
get
(
path_count
,
v
))
/
dependency_type
(
get
(
path_count
,
u
));
factor
*=
(
dependency_type
(
1
)
+
get
(
dependency
,
u
));
put
(
dependency
,
v
,
get
(
dependency
,
v
)
+
factor
);
update_centrality
(
edge_centrality_map
,
*
vw
,
factor
);
}
if
(
u
!=
s
)
{
update_centrality
(
centrality
,
u
,
get
(
dependency
,
u
));
while
(
!
ordered_vertices
.
empty
())
{
vertex_descriptor
u
=
ordered_vertices
.
top
();
ordered_vertices
.
pop
();
typedef
typename
property_traits
<
IncomingMap
>::
value_type
incoming_type
;
typedef
typename
incoming_type
::
iterator
incoming_iterator
;
typedef
typename
property_traits
<
DependencyMap
>::
value_type
dependency_type
;
for
(
incoming_iterator
vw
=
incoming
[
u
].
begin
();
vw
!=
incoming
[
u
].
end
();
++
vw
)
{
vertex_descriptor
v
=
source
(
*
vw
,
g
);
dependency_type
factor
=
dependency_type
(
get
(
path_count
,
v
))
/
dependency_type
(
get
(
path_count
,
u
));
factor
*=
(
dependency_type
(
1
)
+
get
(
dependency
,
u
));
put
(
dependency
,
v
,
get
(
dependency
,
v
)
+
factor
);
update_centrality
(
edge_centrality_map
,
*
vw
,
factor
);
}
if
(
u
!=
s
)
{
update_centrality
(
centrality
,
u
,
get
(
dependency
,
u
));
}
}
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment