?? 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();
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -