Я использую boost::thread_group
для управления своими темами. Дизайн был таким образом, что каждый поток в группе потоков вызывает последовательность функторов структуры A
.Поведение объекта в многопоточном
псевдокод:
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;
}
Мой вопрос:
Будут ли переменные данные
n
,p
,x
иy
и вычисление в объектеA
, быть перемежаются по потокам?Если бы мы должны были идти дальше, имея больше вызовов для функтора
A
для каждого процессора, например, 1 потока 1 CPU и для каждой нити более 4 вызова функтораA
делать вычисление, каким будет поведение условия состояния переменных и вычислениеA
?