Как всегда иметь одновременно столько потоков, сколько ядер? - PullRequest
0 голосов
/ 21 октября 2019

У меня есть вектор точек. Каждая точка является n-мерным вектором. Для меня есть k = 100 баллов. Я должен рассчитать для каждой точки значения нескольких функций многих переменных. После этого я записываю результаты в текстовый файл.

У меня 4 ядра. Я использую многопоточность для этой задачи. Я хочу, чтобы только 4 потока работали одновременно. Мои темы почти независимы. Они имеют только один ресурс. TXT-файл. Каждый поток записывает результаты в конце. Я использую мьютекс для записи в этот файл.

Теперь у меня есть следующее решение:

for (int i = 0; i < k; k+=number_of_threads){
// create 4 threads

// start function for each 4 threads

// join thread 1
// join thread 2
// join thread 3
// join thread 4
}

Проблема в том, что новые потоки не будут запускаться, пока не закончится каждый поток. Это работает. Но я думаю, что есть лучшее решение.

Как я могу начать новый поток сразу после завершения одного из потоков? И я хочу, чтобы одновременно работали только 4 запущенных потока (4 - число ядер). Кстати, я использую pthreads.

...