美文网首页操作系统
整形与纪录型信号量

整形与纪录型信号量

作者: Zh1为明天1 | 来源:发表于2018-12-06 16:32 被阅读0次

整型信号量被定义为一个用于表示资源数目的整型量S,wait和signal操作可描述为:

wait(S){

    while (S<=0);

    S=S-1;

}

signal(S){

    S=S+1;

}

wait操作中,只要信号量S<=0,就会不断地测试。因此,该机制并未遵循“让权等待” 的准则,而是使进程处于“忙等”的状态。

记录型信号量

记录型信号量是不存在“忙等”现象的进程同步机制。除了需要一个用于代表资源数目的整型变量value外,再增加一个进程链表L,用于链接所有等待该资源的进程,记录型信号量是由于釆用了记录型的数据结构得名。记录型信号量可描述为:

typedef struct{

    int value;

    struct process *L;

} semaphor

相应的wait(S)和signal(S)的操作如下:

void wait (semaphore S) { //相当于申请资源

    S.value--;

    if(S.value<0) {

        add this process to S.L;

        block(S.L);

    }

}

wait操作,S.value--,表示进程请求一个该类资源,当S.value<0时,表示该类资源已分配完毕,因此进程应调用block原语,进行自我阻塞,放弃处理机,并插入到该类资源的等待队列S.L中,可见该机制遵循了“让权等待”的准则。

void signal (semaphore S) {  //相当于释放资源

    S.value++;

    if(S.value<=0){

        remove a process P from S.L;

        wakeup(P);

    }

}

signal操作,表示进程释放一个资源,使系统中可供分配的该类资源数增1,故S.value++。若加1后仍是S.value<=0,则表示在S.L中仍有等待该资源的进程被阻塞,故还应调用wakeup 原语,将S.L中的第一个等待进程唤醒。

相关文章

  • 整形与纪录型信号量

    整型信号量被定义为一个用于表示资源数目的整型量S,wait和signal操作可描述为: wait(S){ wh...

  • 信号量

    整形信号量 wait(s){while(s<=0)s--; } signal{s++; } 记录型信号量 type...

  • 第二章 信号量(1)

    整形信号量 记录型信号量 这些wait 都是-1 signal都是+1 不同的是 整型信号量wait先判断小于0然...

  • 操作系统知识点(七)——信号量

    信号量 背景 信号量(semaphore) 抽象数据类型一个整形(sem),两个原子操作P():sem减1,如果s...

  • 理解操作系统之信号量的应用

    利用信号量实现进程互斥(模式) 利用信号量实现前驱关系(模式) 利用记录型信号量实现同步(模式) 1.利用信号量实...

  • The Swift Programming Language一些

    struct与class mutaing与extension defer 整形浮点型转化 一些关键词 final ...

  • 信号量(一)

    信号量机制是一种卓有成效的进程同步工具。 1.整形信号量 仅有两个标准的院子操作wait(S)和signal(S)...

  • python核心编程第二版:第五章--数字

    5.1 数字类型 整形、长整形、布尔型、双精度浮点型、十进制浮点型和复数。 创建数值对象并赋值 在赋值的同时,被创...

  • 使用信号量实现GCD下的并发和同步

    一、简介: 信号量是一个整形值,并且具有一个初始计数值,并且支持两个操作,信号通知和等待。当一个信号量被信号通知,...

  • int 和 char 型数字的区别

    int 是整形 因此定义的数字是 一个整形的数字 int a =1; 那么a就是为1. char 型为字符型 ,是...

网友评论

    本文标题:整形与纪录型信号量

    本文链接:https://www.haomeiwen.com/subject/vqbocqtx.html