0
所以我试图做一个程序,在c中创建一个线程,其工作是找到2个给定数字的最大值。我写(名为askisi.c)的第一个节目是如下:传递数组到pthread_create
#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;
的实际操作。
好的,但为什么在这个铸造后im引用具有'arguments [1]'而不是'* arguments [1]'的元素? – asdf
'arguments'是一个char数组的指针(为了更容易理解,我们可以说它是一个指向字符串数组的指针)。所以,如果你想访问第一个char(或字符串)数组,你可以使用'*(arguments + pos)'或'arguments [pos]',因为它们是等价的。另外'arguments'它自己指向'arguments [0]'。 我建议阅读关于'C中的数组下标'[http://users.ece.utexas.edu/~valvano/embed/chap8/chap8.htm]以获得更好的想法 –
会做。谢谢 – asdf