Linux C實現純使用者態搶占式多執行緒

2021-10-23 01:26:18 字數 1041 閱讀 1867

#include

#include

#include

#include

#include

#include

// 僅僅是測試demo,分配4096位元組的stack足夠了。

#define stack_size 4096

/* * 為什麼是72?

* 因為我們在訊號處理中增加了乙個區域性變數,這樣pretcode的偏移就是32位元組了。

* 於是32+40=72!

*/#define context_offset 72

// rip暫存器相對於區域性變數a的偏移。注意rip在sigcontext中的偏移是16

#define pc_offset 200

#define schedule_interval 1

intwait_start()

}void

thread1()

}void

thread2()

}unsigned

char

*buf;

int start =0;

struct sigcontext context[2]

;struct sigcontext *curr_con;

unsigned

long pc[2]

;int idx =0;

unsigned

char

*stack1,

*stack2;

// sigint用來啟動所有執行緒,每次訊號啟動乙個。

純使用者空間搶占式多執行緒的設計

純使用者空間的搶占式多執行緒庫其實是很麻煩的一件事,在設計之前首先必須明白搶占式多執行緒的意義,其本質就是古老的unix多道程式設計,策略可以是分時的,也可以是其它任何的排程策略,不管什麼策略,機制要素都是底層的os核心和機器硬體提供的,對於x86上的linux來說,這些要素包括 分頁機制 提供程序...

純使用者空間搶占式多執行緒的設計

純使用者空間的搶占式多執行緒庫其實是很麻煩的一件事,在設計之前首先必須明白搶占式多執行緒的意義,其本質就是古老的unix多道程式設計,策略可以是分時的,也可以是其它任何的排程策略,不管什麼策略,機制要素都是底層的os核心和機器硬體提供的,對於x86上的linux來說,這些要素包括 分頁機制 提供程序...

使用 ucontext 實現使用者態執行緒 下

前面的文章介紹了 ucontext 相關函式的基本作用,我們已經知道如何用 getcontext 等函式實現基本的函式 yield resume 的操作了。下面來看看如何實現乙個簡陋的使用者態執行緒庫吧!首先來看我們 thread 的定義 define stack size 4096 typedef...