所以我试图创建一个在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;
实际上做了什么的可理解的解释。
答案 0 :(得分:0)
void
不是真正的类型,在这种情况下,它意味着函数期望任何类型,并由程序员决定使用casting
完成哪一种。
通过执行char **arguments = (char**)param;
,您将参数转换为char **
并将该转换分配给变量arguments
。