gpt4 book ai didi

c - 将数组传递给 pthread_create

转载 作者:行者123 更新时间:2023-11-30 16:53:57 28 4
gpt4 key购买 nike

所以我试图编写一个程序,在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);
}

但是在 Linux 中使用 gcc 时出现以下错误: enter image description here

现在经过大量研究,我发现我的函数 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; 实际作用的可理解的解释。

最佳答案

void 不是真正的类型,在这种情况下,它意味着该函数需要任何类型,并且由程序员决定使用转换来完成。

因此,通过执行 char **arguments = (char**)param;,您将 param 转换为 char ** 并将该转换分配给变量 arguments .

关于c - 将数组传递给 pthread_create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40699237/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com