Проблема выполнения потока
Я подхожу к программированию на C с потоками и не могу заставить эту программу работать должным образом. В основном есть вектор с k элементами, n нитями, и каждый поток должен рассчитать максимальное значение для его k/n элементов.
Мой код (обратите внимание, это не весь код):
// Struct code used later
struct maxStruct
{
double *vettore;
int dimensione;
};
// Gathering data input from user
[ . . . ]
vector = (double *) malloc (dimensione * sizeof(double));
pid_thread = (int *) malloc (numero_thread * sizeof(int));
thread = (pthread_t *) malloc (numero_thread * sizeof(pthread_t));
// Generating the vector
[ . . . ]
for (i = 0; i < numero_thread; i++)
{
e = generaStruct(i, vettore, dimensione, numero_thread);
if (status = pthread_create(&thread[i], NULL, calcolaMassimo, (void *) e))
{
pthread_perror("pthread_join", status);
exit(1);
}
}
//Note that the function doesn't calculate the max, I've coded it in this way
//in order to see whether it was being called by each thread and apparently it is not.
void *calcolaMassimo(void * e)
{
printf("Sono chiamata!!\n");
struct maxStruct *sottoVettore = e;
printf("Dimensione: %d\n", ((*sottoVettore).dimensione));
}
Очевидно, эта функция вызывается не каждым потоком, и я не могу понять, почему. Не могли бы вы помочь мне решить эту проблему?
1 ответ
Во-первых, мелкая гнида, идиоматический способ написания (*sottoVettore).dimensione)
является sottoVettore->dimensione
,
Процесс, содержащий все потоки, завершится, когда main()
выходы. Я знаю, что вы сказали, что вы присоединяетесь к настоящему коду, так что это не должно быть проблемой, но если вы не присоединяетесь к тестовому коду, то это может быть проблемой.
Также возможно, что проблема не в том, что код в каждом потоке не выполняется, а в том, что операторы фактически не достигают stdout
, Вы можете попробовать fflush(stdout)
в конце calcolaMassimo
и посмотреть, если это что-то меняет.