R
robin.chauhan
I'm stuck while trying to make this C++ app multi-threaded! Any advice
would be appreciated.
Basically I have a very big graph data structure in memory. And I want
to run an algorithm on it, using a priority_queue to track which order
I will inspect the nodes :
goal_location L;
priority_queue<EID, vector<EID>, locComparison > openq;
struct locComparison {
bool operator () ( EID i1, EID i2 ) {
... compare i1 and i2 based on distance from goal location
....
};
};
Right now I am just using a mutex on the algorithm so only one can run
at a time, and then using a global variable to hold the goal location
(which is fine because I allow only one algo-instance at a time). But
then I'm not using my multiple cores.
So I would like to be able to run more than one instance of this
algorithm on the data structure at once in multiple threads.
I just cant tell the "locComparison" functor what the per-algorithm
goal location is. If I wrap the priority_queue in a class:
class algo
{
goal_location L;
priority_queue( ... locComparison );
}
.... each instance of the class would use the same locComparison
function, and I have no way of passing parameters to locComparison it
to tell it what the goal location is for this particular priority
queue.
Any thoughts? Places you would suggest I look?
Thanks!
-Robin
would be appreciated.
Basically I have a very big graph data structure in memory. And I want
to run an algorithm on it, using a priority_queue to track which order
I will inspect the nodes :
goal_location L;
priority_queue<EID, vector<EID>, locComparison > openq;
struct locComparison {
bool operator () ( EID i1, EID i2 ) {
... compare i1 and i2 based on distance from goal location
....
};
};
Right now I am just using a mutex on the algorithm so only one can run
at a time, and then using a global variable to hold the goal location
(which is fine because I allow only one algo-instance at a time). But
then I'm not using my multiple cores.
So I would like to be able to run more than one instance of this
algorithm on the data structure at once in multiple threads.
I just cant tell the "locComparison" functor what the per-algorithm
goal location is. If I wrap the priority_queue in a class:
class algo
{
goal_location L;
priority_queue( ... locComparison );
}
.... each instance of the class would use the same locComparison
function, and I have no way of passing parameters to locComparison it
to tell it what the goal location is for this particular priority
queue.
Any thoughts? Places you would suggest I look?
Thanks!
-Robin