1

我正在创建一个用户级线程库,我想做的是在存根内运行一个函数,所以我想将函数指针传递给存根函数。

这是我的存根函数:

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
}

任何帮助表示赞赏。谢谢!

4

1 回答 1

1

如果您有兴趣实现自己的用户级线程库,我建议您研究(现已弃用)ucontext实现。具体来说,查看其中使用的结构的定义ucontext.h将帮助您查看实际需要捕获的所有内容,以获取线程状态的有效快照。

(address_t)在示例中真正想用错误的演员来捕捉的是当前的continuation。不幸的是,C 不支持一流的延续,所以你会被困在更底层的事情上,比如交换堆栈和转储寄存器(因此我指出你ucontext作为参考——它会很友好如果你真的想做到这一点,那会很复杂)。

于 2013-10-20T15:39:11.010 回答