Вам уже написали выше, как это реализовать с помощью стандартной библиотеки (правда пока это ещё не часть стандарта, насколько мне известно).
В вашем случае, алгоритм будет такой:
1) Узнать число доступных потоков
https://en.cppreference.com/w/cpp/thread/thread/ha...
2) Развить массив на столько частей, сколько у вас есть потоков
3) Написать функцию, которая принимает, скажем два итератора на часть массива, которую необходимо обработать, и два итератора на массив с результатами
4) Создать необходимое количество потоков
https://en.cppreference.com/w/cpp/thread/thread/thread (число было получено в пункте 1) и запустить в них функции.
5) Дождаться результатов завершения:
https://en.cppreference.com/w/cpp/thread/thread/join
Для этого можно использовать и std::async (
https://en.cppreference.com/w/cpp/thread/async). Он возвращает std::future (
https://en.cppreference.com/w/cpp/thread/future), на этом объекте необходимо будет ждать результатов вычисления.
Хотелось бы ещё отметить, что возможно не имеет смысла параллелить обработку небольших массивов, это только замедлит программу.