我正在尝试实现一个 fork 功能。此函数将一个线程一分为二。第一个继续执行,而第二个开始执行f
(被调用函数)v
(参数)。我的 fork 函数的代码是
void t_fork(ThreadFunc f, any_ptr v, char *name)
{
tcb *currentTcb = malloc(sizeof(tcb));
currentTcb->func= f;
currentTcb->arg= v;
currentTcb->sig=NULL;
strcpy(currentTcb->name,name);
setjmp(currentTcb->context);
q_insert(theadSystem.waitQ,currentTcb);
(*f)(v);
}
我还需要使用 spawn 例程为新线程分配堆栈空间。
在我的代码中setjmp
导致错误,我也不知道如何使用 spawner 为新线程分配空间。
它导致异常:Unhandled exception at 0xcccccccc in Threads.exe: 0xC0000005: Access violation.
任何人都可以帮助纠正这些问题吗?