这里的信号量机制采取的是记录型信号量(如果采取整型信号量会不满足让权等待)
//记录型信号量的定义 typedef struct { int value; //剩余资源数 struct procees *L //等待队列 } semaphore; void wait (semaphore mutex) { //wait 原语 mutex.value--; while (mutex.value<0) //如果临界资源不够,就进入block原语 block(mutex.L); } void siganl (semaphore mutex) { //signal原语 mutex.value++; if(mutex.value<=0) //如果还有进程未执行,执行wakeup原语进行唤醒 wakeup(mutex.L) }
这两个函数是两个原语,原语的意思是,一旦这个函数执行,中间就不会切换进程,知道这一个原语执行结束才可能出现切换进行。至于这个原语操作是怎样实现的,这就属于另外的问题了,这里不再做阐述。
操作系统-------wait和signal函数原型
最新推荐文章于 2023-11-03 23:15:43 发布