[英]How do I run a function on a user level thread?
所以我要创建自己的线程库,首先要有两个函数system_init()和uthread create(void(* func)()) ,其中第一个应该初始化我的程序来处理用户线程。创建一个运行提供的功能的线程。 这些功能如下:
#include <stdio.h>
#include <queue>
#include <ucontext.h>
#include <semaphore.h>
#include <unistd.h>
std::queue<ucontext_t> *readyQueue;
int numKernelThreads;
int numIOWaitingProcesses;
sem_t sem;
void system_init() {
numKernelThreads = 0;
numIOWaitingProcesses = 0;
sem_init(&sem, 0, 1);
}
int uthread_create(void (* func)()) {
ucontext_t context;
getcontext(&context);
makecontext(&context, func, 0);
readyQueue->push(context);
}
我有一些问题。 首先,我不知道如何运行uthread_create()中提供的功能。 其次,将上下文推送到队列时遇到分段错误。 我只是完全迷路了,不胜感激。 谢谢。
要在uthread_create()
运行该函数,您需要将func
推入堆栈。 用类似的东西初始化栈
char* stack = new char[STACK_SIZE];
context.uc_stack.ss_sp = stack;
context.uc_stack.ss_size = STACK_SIZE;
其中STACK_SIZE
是一些预定义的常量(常量SIGSTKSZ
应该起作用)。 之后,将func
(及其相关参数)推入堆栈。
出现分段错误的原因是ucontext_t
类型包含一个指向其自身的指针,当您将其直接推入队列时,您正在进行复制。 然后,新副本指向旧数据成员,并且当删除旧数据成员时,您将遇到段错误。 而是使一个指向ucontext_t
的指针队列,然后从那里继续。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.