2015-11-26 7 views
1

У меня есть программа с потоком, которую я должен запускать на нескольких компьютерах. Каждое из них имеет различное количество поддерживаемых потоков. В компьютере, на котором я разработал программу, есть 4 потока, и поэтому я жестко закодировал 4 потока, которые нужно создать. Я хочу, чтобы это менялось в зависимости от ситуации. Я хочу использовать std :: thread :: hardware_concurrency, чтобы получить количество потоков и разделить работу на количество доступных потоков. Это возможно ?Создать переменное число std :: threads

создание Твердая закодированы нить:

//const unsigned int SIZE = std::thread::hardware_concurrency ; 
    const unsigned int SIZE = 4 ; 

     void zeroOut(std::vector<obj> vec , int start , int end) 
     { 
     // Does an operation on vec from start index to end index 
     } 
     int main() { 
      std::vector<obj_thread> vec ; 
      // Do some work on vec. Fill it with values. 
       unsigned int step = vec.size()/SIZE; 
       std::thread thread1(zeroOut,vec,step,step*2); 
       std::thread thread2(zeroOut,vec,step*2,step*3); 
       std::thread thread3(zeroOut,vec,step*3,step*4); 
       zeroOut(vec, 0 , step); 
       thread1.join(); 
       thread2.join(); 
       thread3.join(); 
      return 0 ; 
      } 

Я имею в виду, используя зЬй :: вектор, но я новичок в многопоточных программирования и не знаю, как это сделать.

Спасибо за ваше время.

+4

Вы * пробовали * используя вектор для создания темы? Как это работает? Как это не сработало? С какими проблемами вы столкнулись? –

+0

'Я думаю об использовании std :: vector' Это хорошая идея. Но я не вижу, какая конкретная проблема у вас есть сейчас. Создание потоков, разделение работы ...? – deviantfan

+0

@JoachimPileborg На самом деле я не знаю. Я думал, что могу использовать цикл for, который петли до _SIZE_ и помещает их в вектор? Мне было интересно, будет ли это работать – nnrales

ответ

2

Возможно ли это?

Да.

Я имею в виду, используя зЬй :: вектор

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

но я новичок в многопоточном программировании и не знаю, как это сделать.

Вы используете только вектор потоков в исходной главной теме, которая создает другие потоки. Поскольку вы используете вектор в одном потоке, его использование ничем не отличается от использования вектора в однопоточной программе.

Смежные вопросы