Вызвать функцию в разных потоках C++

258
29 декабря 2018, 05:40

Можно ли выполнять разные участки кода одной функции в разных потоках? Например:

#include <iostream>
#include <thread>
void make(){
  some code //Выполнить в потоке a
  some code 2 // Выполнить в потоке b
}
int main(){
  thread a(make);
  thread b(make);
  some code 3; 
}
Answer 1

Без проблем, стоит только передать в процедуру какой-то идентификатор, позволяющий определить, какой из кусков следует выполнять в данном потоке:

#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

Answer 2

Именно так, как вы пишете - нет. Нечто подобное позволяет OpenMP - например, распараллелить цикл, но это не совсем C++, это расширение все же...
Но! никто не мешает сделать так: разбить make() на две функции, вроде

void make()
{
    first();
    second();
}

и уже их выполнить параллельно.

READ ALSO
C++: проверка строки

C++: проверка строки

Функция check() почему-то не работает, при вводе "Start" она все равно выводит сообщение о том, что "Команда введена не верно!" Не могу понять, где...

192
Почему атрибут не добавляется в модель?

Почему атрибут не добавляется в модель?

Не судите строго, ошибка в какой-то мелочи наверноеЕсть view

173
Как показать изображение оффлайн в FirebaseDatabase

Как показать изображение оффлайн в FirebaseDatabase

Вот мой код! Приложение запоминает имя и статус чтобы показать их оффлайн но как мне сохранить изображение чтобы показать их оффлайнЗаранее...

185