gpt4 book ai didi

c - pthread_join 错误

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

我的程序需要创建一些线程,但我被困在 pthread_join 上,因为它总是进入错误情况,因为返回(安全)是 3,而不是 0,我认为这是正确的数字,以防万一一切顺利。

编辑:为了更好地解释自己,错误是代码在不应该进入的情况下进入了错误处理区域,这意味着我收到了“错误等待:成功”消息。

int main() {    

pthread_t tids[NUM_THREADS];
int a, i, resultado, safe ;
char *f ;

f = (char *)malloc(sizeof(SIZEFICHEIRO));
a = randomnum(4);
f = pickfile(a, f);

for ( i=0; i<NUM_THREADS ; i++ )
{
safe = pthread_create( &tids[i] , NULL , (void *)verificador , (void *) f) ;
if ( safe != 0 )
perror ("Error creating threads");
}

for ( i=0; i<NUM_THREADS ; i++ )
{
safe = pthread_join( tids[i], (void **)&resultado ) ;
if ( safe != 0 ) // Error here
perror ("Error waiting");

printf("Result(0:Works ; -1:error) = %d\n", resultado);
}

}

最佳答案

safe = pthread_join( tids[i], (void **)&resultado ) ;
printf("%d", error );
if ( safe != 0 ) // Error here
perror ("Error waiting");

如果像大多数调用一样,pthread_join 将错误隐藏在 errno 中,则问题在于您对 printf 的调用可能会更改错误由 pthread_join 隐藏的代码。如果您要调用 perror 来打印错误,则需要在生成错误的函数返回后立即调用它。

但是,pthread_join 不会将错误存储在 errno 中,而是返回错误。所以调用 perror 是行不通的。你可以这样做:

if ( safe != 0 )     // Error here
{
errno = safe;
perror ("Error waiting");
}

if ( safe != 0 )
printf ("Error waiting: %s\n", strerror (safe));

关于c - pthread_join 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26791119/

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