Можно ли выполнять разные участки кода одной функции в разных потоках? Например:
#include <iostream>
#include <thread>
void make(){
some code //Выполнить в потоке a
some code 2 // Выполнить в потоке b
}
int main(){
thread a(make);
thread b(make);
some code 3;
}
Без проблем, стоит только передать в процедуру какой-то идентификатор, позволяющий определить, какой из кусков следует выполнять в данном потоке:
#include <iostream>
#include <thread>
void make(char const code_id)
{
switch(code_id)
{
case 'a':
{
// some code
}
break;
case 'b':
{
// some code 2
}
break;
default:
{
// do nothing...
}
break;
}
}
int main()
{
::std::thread a(&::make, 'a');
::std::thread b(&::make, 'b');
a.join();
b.join();
return 0;
}
online compiler
Именно так, как вы пишете - нет.
Нечто подобное позволяет OpenMP - например, распараллелить цикл, но это не совсем C++, это расширение все же...
Но! никто не мешает сделать так: разбить make() на две функции, вроде
void make()
{
first();
second();
}
и уже их выполнить параллельно.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей