📄 sem_move.c
字号:
#include"kernel.h"
void move_semaphore(int semaphore_id,int destination_process)
{
int front,back;
struct process *p;
struct semaphore *s;
s=&(os->semaphore[semaphore_id]);
p=&(os->process[s->process]);
p->semaphore_number--;
if(p->semaphore_ring==semaphore_id)
p->semaphore_ring=s->back;
if(p->semaphore_ring==semaphore_id)
p->semaphore_ring=-1;
else{
front=s->front;
back=s->back;
os->semaphore[front].back=back;
os->semaphore[back].front=front;
}
p=&(os->process[destination_process]);
p->semaphore_number++;
if(p->semaphore_ring==-1){
p->semaphore_ring=semaphore_id;
s->front=semaphore_id;
s->back=semaphore_id;
}
else{
front=p->semaphore_ring;
back=os->semaphore[front].back;
os->semaphore[semaphore_id].front=front;
os->semaphore[semaphore_id].back=back;
os->semaphore[front].back=semaphore_id;
os->semaphore[back].front=semaphore_id;
}
s->process=destination_process;
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -