📄 thread_heap.c
字号:
#include"kernel.h"
void remove_from_heap(int thread_id)
{
int s,t_run,h_run,t_ready,h_ready;
if((s=os->thread[thread_id].state)==READY){
remove_from_ready_heap(thread_id);
os->thread[thread_id].state=SLEEP;
return;
}
if(s!=RUN)
return;
if(os->thread_heap.ready_thread_number<=0){
remove_from_run_heap(thread_id);
os->thread[thread_id].state=SLEEP;
left_run_state(thread_id);
return;
}
t_run=thread_id;
h_run=os->thread[t_run].heap;
t_ready=os->thread_heap.ready_heap[0].thread;
h_ready=0;
os->thread_heap.run_heap[h_run].thread=t_ready;
os->thread_heap.ready_heap[h_ready].thread=t_run;
os->thread[t_run].heap=h_ready;
os->thread[t_run].state=READY;
os->thread[t_ready].heap=h_run;
os->thread[t_ready].state=RUN;
run_heap_up_deal(t_ready);
remove_from_ready_heap(t_run);
os->thread[thread_id].state=SLEEP;
left_run_state(t_run);
enter_run_state(t_ready);
return;
}
void insert_into_heap(int thread_id)
{
int t,t_run,p,p_run;
t=thread_id;
if(os->thread[t].state!=SLEEP)
return;
if(os->thread_heap.run_thread_number<VIRTUAL_CPU_NUMBER){
os->thread[t].state=RUN;
insert_into_run_heap(t);
enter_run_state(t);
return;
}
p=os->thread[t].priority;
t_run=os->thread_heap.run_heap[0].thread;
p_run=os->thread[t_run].priority;
if(p>=p_run){
os->thread[thread_id].state=READY;
insert_into_ready_heap(t);
return;
}
os->thread[t].state=RUN;
os->thread[t].heap=0;
os->thread_heap.run_heap[0].thread=t;
run_heap_down_deal(t);
os->thread[t_run].state=READY;
insert_into_ready_heap(t_run);
left_run_state(t_run);
enter_run_state(t);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -