[英]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.