Я думаю, вы могли бы просто сделать один из потоков вашим специальным потоком в параллельном блоке omp
int main() {
#pragma omp parallel
if(omp_get_thread_num()==0){
while(1) {
Sleep(4000);
printf("Hello from main %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads());
}
}else{
while(1) {
Sleep(4000);
printf("doing work in thread %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads());
}
}
}
}
Погода, которая имеет смысл в вашем случае, трудно судить без подробностей.* Вы также можете использовать sections
.Пример отсюда: http://bisqwit.iki.fi/story/howto/openmp/#Sections:
#pragma omp parallel // starts a new team
{
//Work0(); // this function would be run by all threads.
#pragma omp sections // divides the team into sections
{
// everything herein is run only once.
{ Work1(); }
#pragma omp section
{ Work2();
Work3(); }
#pragma omp section
{ Work4(); }
}
//Work5(); // this function would be run by all threads.
}
Вы можете сделать вложенную ренационализацию: OpenMP: В чем преимущество параллелизации во вложении?