📄 kesem.c
字号:
#include <platform.h>
#include <kernel.h>
#include <stdio.h>
void initsemaphore(struct semaphore * sem, uint32 initial)
{
sem->value=initial;
sem->pendingtasks=NULL;
}
void wait(struct semaphore * sem)
{
_cli();
if(sem->value==0)
{
kePendTask(&sem->pendingtasks, tasks[currentTaskId]);
_sti();
keDoSchedNormal();
}else
sem->value=0;
_sti();
}
void release(struct semaphore * sem)
{
struct taskblock * tb;
_cli();
if(sem->value==0)
{
tb=keTaskDequeue(&sem->pendingtasks);
if(tb!=NULL)
{
keActiveTask(tb);
_sti();
keDoSchedNormal();
}else
sem->value=1;
}
_sti();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -