У меня есть программа с функцией, которая принимает указатель как arg и main. Главное - создавать потоки n, каждый из которых выполняет функцию в разных областях памяти в зависимости от прошедшего arg
. Затем потоки соединяются, основной выполняет некоторые смешения данных между областью и создает n новые потоки, которые выполняют ту же операцию, что и старые.
Чтобы улучшить программу, я хотел бы сохранить потоки живыми, удалив длительное время, необходимое для их создания. Нити должны спать, когда основное устройство работает и уведомляется, когда им приходится подниматься снова. Точно так же основной должен ждать, когда потоки работают так же, как и с join.
Я не могу закончить сильную реализацию этого, всегда попадая в тупик.
Простой базовый код, любые подсказки о том, как его изменить, будут высоко оценены
#include <thread>
#include <climits>
...
void myfunc(void * p) {
do_something(p);
}
int main(){
void * myp[n_threads] {a_location, another_location,...};
std::thread mythread[n_threads];
for (unsigned long int j=0; j < ULONG_MAX; j++) {
for (unsigned int i=0; i < n_threads; i++) {
mythread[i] = std::thread(myfunc, myp[i]);
}
for (unsigned int i=0; i < n_threads; i++) {
mythread[i].join();
}
mix_data(myp);
}
return 0;
}