⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sem_move.c

📁 国内一位牛人自己开发的操作系统
💻 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 + -