В вашей задаче, похоже, у вас разные диапазоны k для каждого потока.Таким образом, вам не нужен мьютекс для вычисления значения k.Единственное, что нужно, это отправить начальное и конечное значение k для каждого потока, которое передается в функцию af_sum.
Поскольку мы не можем передать несколько аргументов функции потока, необходимо использовать структуру для группировки всехаргументы.Будет использовать указатель на структуру в качестве аргумента функции потока.
Необходимы следующие изменения
typedef struct dataStruct
{
int start;
int end;
}dataStruct;
void *Data_output(void *data)
{
dataStruct *D = (dataStruct *)data;
for(int k = D->start; k < D->end; k++)
af_sum(&sum_Data[k], &sub_Data[k], &Out_Mem[k]);
}
int main()
{
pthread_t read_thread_id[4];
dataStruct D[4] = {{0, 32}, {32, 64}, {64, 96}, {96, 128}};
int i;
for (i = 0; i < thread_count ; i++)
{
pthread_create (&read_thread_id[i], NULL, Data_output, (void *) &D[i]);
}
for (i = 0; i < thread_count; i++)
{
pthread_join (read_thread_id[i], NULL);
}
return (0);
}