gpt4 book ai didi

c - setcontext() 段错误

转载 作者:行者123 更新时间:2023-12-01 13:47:09 25 4
gpt4 key购买 nike

我正在尝试使用 C 中的上下文切换创建自定义 pthread 库。我在调用 setcontext() 时遇到了出现段错误的问题 - 关于此函数的文档似乎有限,所以我可以'我真的不知道发生了什么,这已经让我停工了很多时间。我的代码:

#include <signal.h>
#include <ucontext.h>

struct mypthread_t{
int id;
int pid;
int isRunning;
mypthread_t *next;
ucontext_t* context;
};

int mypthread_create(mypthread_t *thread, const mypthread_attr_t *attr, void *(*start_routine)(void *), void *arg)
{
printf("Hello\n");
thread->id = threadID++;
thread->context = malloc(sizeof(ucontext_t));
thread->context->uc_stack.ss_sp = malloc(16384);
thread->context->uc_stack.ss_size = 16384;
thread->context->uc_link = 0;

makecontext(thread->context, (void *) start_routine, 1, arg);
setcontext(thread->context);
}

似乎我已经 malloc 了所有需要 malloc 的东西,所以我不明白为什么 setcontext(thread->context) 给我一个段错误。任何帮助将不胜感激 - 函数的上下文系列真的让我很困惑。这是它在 gdb 中失败的行:

fldenv  (%rcx)

最佳答案

在调用 makecontext(3) 之前调用 getcontext(3) 来初始化您的 ucontext_t 对象:

if (getcontext(thread->context) == -1) {
// ... error handling
// ... errno is set appropriately to indicate the error that occurred
}
makecontext(...);

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

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