我正在使用 POSIX 线程编写程序以在整数数组中找到 minimax。我的问题是如何确定我需要多少线程以及在线程函数内输出最小值和最大值是否正确?为什么我需要动态线程?
这是我的代码:
#include<pthread.h>
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
#define num_of_threads 1
#define size 10
int array[size];
typedef struct st_minimax {
int min;
int max;
} minimax;
void *thread_minimax(void* ptr) { //thread is searching
int i;
minimax *data;
// data = (minimax*) malloc(minimax);
data = (minimax*) ptr;
data->max = array[0];
data->min = array[0];
for (i = 0; i < size; i++) {
if (array[i] > data->max)
data->max = array[i];
else if (array[i] < data->min)
data->min = array[i];
}
printf("Thread is calculating...\n");
printf("Min: %d", data->min);
printf("Max: %d", data->max);
pthread_exit(NULL); //exit thread
}
int main(int argc, char *argv[]) {
pthread_t worker[num_of_threads];
minimax data;
int t;
int i;
int ret;
for (i = 0; i < size; i++) { //initialize the array
printf("enter value for %d: ", i);
scanf("%d", &array[i]);
}
for(t=0;t<num_of_threads;t++)
{
printf("creating threads...%d\n",t);
ret = pthread_create(&worker[t], 0, thread_minimax, (void*) &data); //creating thread
sleep(1);
if (ret) {
fprintf(stderr, "thread err %d", ret);
exit(-1);
}
}
pthread_exit(NULL); //exit thread
return 0;
}