Использование множества потоков может значительно увеличить скорость выполнения программы. В настоящее время возможности повышения частоты работы процессора практически исчерпаны и производители идут по пути увеличения ядер процессора. Не все задачи допускают распараллеливание, но там где это возможно прирост может составлять чуть меньшее число раз чем количество ядер (включая виртуальные от технологии Hyper-threading).
Одним из способов использования многопоточности в языке Си является использование заголовочного файла pthread.h и функций pthread_create() и pthread_join():
1) Следует объявить и определить функцию передаваемую потоку типа void * thread_func(void *args). Возвращаемый результат и аргументы должны быть указателями на void. Один из вариантов - создание структуры указатель на которую передастся в эту функцию. В приведенной ниже программе это struct thread_args.
2) Создаются идентификаторы потоков pthread_t - по их количеству pthread_t thread[THREAD_SIZE];
3) Запускаются потоки функцией pthread_create(&thread[i], NULL, thread_func, &arguments[i]). В нее передаются указатель идентификатора потока &thread[i], указатель на функцию потока thread_func, и указатель на аргумент функции &arguments[i]
4) Для получения результатов потоков запускается функция pthread_join(thread[i], NULL) по количеству потоков. После чего можно получить результат.
Ниже приведена программа вычисляющая сумму первых 100 миллионов чисел. Количество потоков (используемых ядер процессора) может задаваться переменной THREAD_SIZE (от 1 до, например, 100)