J'essaie d'utiliser boost::thread_group
pour gérer mes threads. La conception était telle que chaque thread dans le groupe de thread invoque une séquence de foncteurs de struct A
.Comportement de l'objet dans multithread
pseudocode:
struct A {
int n;
vector p;
void operator()() {
for(number_of_steps) // Do computations involving members n, p, x and y.
}
private:
float x;
vector y;
};
struct parallel_A : boost::thread_group {
parallel_A(const A* a) : m_a(a) {
for(number_of_cpu) {
create_thread(inner_struct(this));
}
}
void run() {
(*m_a)();
}
private:
struct inner_struct {
parallel_A* a;
inner_struct(parallel_A* _a) : a(_a) {}
void operator()() {
a->run();
}
}
const A* m_a;
}
Ma question est:
Est-ce que les variables de données
n
,p
,x
ety
et le calcul dans l'objetA
, être intercalés par les discussions?Si nous devions aller plus loin en ayant plus d'appels à Functor
A
pour chaque CPU, par exemple 1 fil pour 1 CPU et pour chaque thread 4 plus invocation de foncteurA
pour faire le calcul, quel sera le comportement termes de l'état des variables et le calcul deA
?