我正在创建用户级线程库,我想要做的是在存根中运行一个函数,所以我想将函数指针传递给存根函数。
这是我的存根函数:
void _ut_function_stub(void (*f)(void), int id)
{
(*f)();
DeleteThread(id);
}
这是用户调用的内容。我想要做的是获取_ut_function_stub的指针以分配给 pc ,我尝试了各种不同的选项,包括转换,但编译器一直说“无效使用void表达式”
int CreateThread (void (*f) (void), int weight)
{
... more code
pc = (address_t)(_ut_function_stub(f, tcb->id));
... more code
}
感谢任何帮助。谢谢!
答案 0 :(得分:1)
如果您对实现自己的用户级线程库感兴趣,我建议您查看(现已弃用)ucontext
实现。具体来说,查看ucontext.h
中使用的结构的定义将帮助您查看实际需要捕获的所有内容,以获取线程状态的有效快照。
您尝试使用示例中错误的(address_t)
广告素材捕获的内容是当前的continuation。不幸的是,C不支持一流的延续,所以你会陷入更低级别的事情,比如交换堆栈和转储寄存器(因此我指的是ucontext
作为参考 - 如果你真的想要做到这一点,那将会有点复杂。)