gpt4 book ai didi

c - 将指向结构的指针作为参数传递给线程取消清理处理程序

转载 作者:太空宇宙 更新时间:2023-11-04 02:20:04 26 4
gpt4 key购买 nike

我无法将指向结构的指针作为参数传递给线程取消清理处理程序。这是一些示例代码,当它到达编译器时会爆炸。知道我做错了什么吗?

#include <pthread.h>

typedef struct struct_def {
/* data */
} struct_def;

struct_def *ptr_to_struct_def;

void *
thread_function(void *arg)
{
pthread_cleanup_push(cleanup, (void *)ptr_to_struct_def); /* correct? */

/* function continues */
}

int
main()
{
int err;
pthread_t tid;

err = pthread_create(&tid1, NULL, thread_function, (void *)1);

/* main continues */
}

最佳答案

主要问题是你错过了对

的调用
pthread_cleanup_pop(0)

在“功能继续”评论之后。这将使编译器失败。在 opengroup.org 查看使用 push/pop 的示例代码.

正如其他答案中指出的那样,您还有其他一些问题。

在修复所有编译器错误后,这里至少可以编译:

#include <pthread.h>

typedef struct struct_def {
/* data */
} struct_def;

struct_def *ptr_to_struct_def;

void cleanup (void *arg)
{
/* Do your cleanup for the thread here */
}

void *
thread_function(void *arg)
{
pthread_cleanup_push(cleanup, (void *)ptr_to_struct_def); /* correct? */
/* Function continues */
pthread_cleanup_pop (0);
}

int
main()
{
int err;
pthread_t tid;

err = pthread_create(&tid, NULL, thread_function, (void *)1);
/* main continues */
}

关于c - 将指向结构的指针作为参数传递给线程取消清理处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1731910/

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