【发布时间】:2016-11-19 23:56:45
【问题描述】:
所以我试图制作一个程序,在 c 中创建一个线程,其工作是找到 2 个给定数字的最大值。我编写的第一个程序(名为 askisi.c)如下:
#include <pthread.h>
#include <stdio.h>
#include <sys/types.h>
int max;
void *max_of_two(void *param);
int main(int argc , char *argv[])
{
pthread_t tid;
pthread_attr_t attr;
if (argc != 3)
{
fprintf(stderr,"You have to give 2 numbers... \n");
return -1;
}
pthread_attr_init(&attr);
pthread_create(&tid,&attr,max_of_two,argv);
pthread_join(tid,NULL);
printf("max = %d\n",max);
}
void *max_of_two(void *param)
{
if(atoi(*param[1]) >= atoi(*param[2]))
max = atoi(*param[1]);
else
max = atoi(*param[2]);
pthread_exit(0);
}
现在经过大量研究,我发现我的函数max_of_two 应该这样写:
void *max_of_two(void *param)
{
char **arguments = (char**)param;
if(atoi(arguments[1]) >= atoi(arguments[2])){
max = atoi(arguments[1]);}
else
max = atoi(arguments[2]);
pthread_exit(0);
}
第一个问题是我没有找到任何解释为什么我的第一个程序不起作用。第二个是我没有找到关于char **arguments = (char**)param; 指令实际作用的可以理解的解释。
【问题讨论】: