Создавать Pthreads в цикле
Я создаю несколько потоков в цикле for и после этого цикла присоединяю их к другому циклу. они выполняют свою функцию, пока все они не закончат ее, не так ли? мой последний результат логически неверен. мой результат верен, просто когда присоединяешься к каждому потоку после его создания!!
1 ответ
Да, я думаю, что вы делаете правильно. Давайте, например,
extern "C"
{
#include <pthread.h>
#include <unistd.h>
}
#include <iostream>
using namespace std;
const int NUMBER_OF_THREADS = 5;
void * thread_talk(void * thread_nr)
{
//do some operation here
pthread_exit(NULL); //exit from current thread
}
int main()
{
pthread_t thread[NUMBER_OF_THREADS];
cout << "Starting all threads..." << endl;
int temp_arg[NUMBER_OF_THREADS] ;
/*creating all threads*/
for(int current_t = 0; current_t < NUMBER_OF_THREADS; current_t++)
{
temp_arg[current_t] = current_t;
int result = pthread_create(&thread[current_t], NULL, thread_talk, static_cast<void*>(&temp_arg[current_t])) ;
if (result !=0)
{
cout << "Error creating thread " << current_t << ". Return code:" << result << endl;
}
}
/*creating all threads*/
/*Joining all threads*/
for(int current_t = 0; current_t < NUMBER_OF_THREADS; current_t++)
{
pthread_join(thread[current_t], NULL);
}
/*Joining all threads*/
cout << "All threads completed." ;
return 0;
}
Это ваше решение, когда вы хотите выйти из этой темы, позвонив pthread_exit function
Абсолютно нет уверенности, что какой поток будет выполнен первым.Ваша ОС решит, когда ресурсы будут доступны для ваших потоков, и выполнит их на любом процессоре, наименее загруженном