gpt4 book ai didi

c - 在 C 中的 pthread_create 中传递 int 作为第四个参数

转载 作者:行者123 更新时间:2023-11-30 15:27:48 26 4
gpt4 key购买 nike

int threadreader(void* pos)
{
int a, v;
char *f;

v = (long int) *pos;

f = (char *)malloc(sizeof(SIZEFICHEIRO));
a = randomnum(4);
f = pickfile(a, f);
return reader (v, f);
}


int main(){

int i, pos, extra, retval,safe;
pthread_t thread[K];

for (i = 0; i < K; i++)
{
pos = i * L/K * SIZECADEIA;
safe = pthread_create( &thread[i], NULL, (void*) threadleitor, (void*) &pos);
if (safe != 0)
{
perror ("Error creating threads");
}
}

我正在尝试将 pos 的值传递给函数 threadreader,因为我将在函数阅读器中需要它。问题是,在 pthread_create 的第四个参数中,只有当我输入 pos (&pos) 的地址时它才有效。最后,当我尝试再次访问 pos 的值时,它会打印出以下错误:

warning: dereferencing ‘void *’ pointer [enabled by default]
v = (long int) *pos;
^
reader3.c:92:5: error: invalid use of void expression
v = (long int) *pos;

知道如何解决这个问题吗?

最佳答案

首先将 void 指针转换为 int 指针,然后取消引用该值。像这样:

int threadreader(void* pos)
{
int* p_pos = (int*) pos;
int v = *p_pos;

return v;
}

正如评论者所指出的,您应该确保指针指向一个在线程运行时仍然“事件”的变量。

关于c - 在 C 中的 pthread_create 中传递 int 作为第四个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26842346/

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