if(!A.count(actor_id))// The actor must exist, otherwise A[actor_id] would attempt to write A, and this may produce a race condition if multiple threads do it at the same time
continue;
// if |Top| ≥ k and L[v] > Farn[Top[k]] then return Top; => We can not exploit the lower bound of our vertex to stop the loop, as we are not updating lower bounds L.
// We just compute the farness of our vertex using a BFS
queue<pair<int,int>>q;// FIFO of pairs (actor_index, distance from our vertex).
if(top_actors.size()==k&&distance>prev_distance){// We are in the first item of the next exploration level
if(distance>prev_distance){
constlock_guard<mutex>top_actors_lock(top_actors_mutex);// Acquire ownership of the mutex, wait if another thread already owns it. Release the mutex when destroyed.
if(top_actors.size()==k){// We are in the first item of the next exploration level
// We assume r = A.size(), the maximum possible value
// Insert the actor in top_actors, before the first element with farness >= than our actor's (i.e. sorted insert)
constlock_guard<mutex>top_actors_lock(top_actors_mutex);// Acquire ownership of the mutex, wait if another thread already owns it. Release the mutex when destroyed.