gpt4 book ai didi

c - 在线程库中使用getcontext()进行段错误

转载 作者:行者123 更新时间:2023-12-03 12:55:55 26 4
gpt4 key购买 nike

我正在尝试使用诸如get context,swap context等系统调用在C中实现用户级线程库

我有一个看起来像这样的线程控制块:

struct tcb {
int thread_id;
int thread_pri;
ucontext_t *thread_context;
struct tcb *next;
}

我有一个名为init()的函数,如下所示:
void t_init()
{
tcb *tmp;
tmp = malloc(sizeof(tcb));

getcontext(tmp->thread_context); /* let tmp be the context of main() */
running_head = tmp;
}

我使用gdb并在运行时在getcontext(tmp-> thread_context)函数中遇到了段错误。

我已经阅读了getcontext()的手册页,但是不确定为什么这会向我返回段错误!

有什么建议吗?

最佳答案

您尚未为thread_context分配任何空间,请尝试

void t_init()
{
struct tcb *tmp;
tmp = malloc(sizeof(struct tcb));
if (!tmp)
return -1;

memset(&tmp, 0, sizeof(struct tcb));
tmp->thread_context = malloc(sizeof(ucontext_t));
if (!tmp->thread_context)
return -1;

getcontext(tmp->thread_context);
}

关于c - 在线程库中使用getcontext()进行段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23073007/

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