• 进程同步——信号量机制(操作系统)


    信号量(Semaphores)机制是一种卓有成效的进程同步工具。信号量机制已被广泛应用于单处理机和多处理机系统以及计算机网络中。 

    信号量机制的发展:

    整型信号量 忙等,未遵循让权等待准则

    记录型信号量——重点

    AND型信号量、信号量集

     

    记录型信号量


    需要一个用于代表临界资源数目的整型变量value;还要一个在该资源上阻塞的队列(链表)指针L。故信号量应采用记录型(C语言中为结构型)的结构:

    1. struct semaphore //记录型信号量的结构定义
    2.   {
    3.         int value ;
    4.         PCB  *L ;
    5.   };

    信号量除初始化外,只能通过两个原子操作(称为原语)

    wait(S)和signal(S)来访问。它们以前被称为P、V操作。

    wait和signal操作可用C/C++语言描述如下:

    1. void wait( semaphore S)
    2. {
    3. S.value = S.value – 1 ;
    4. if (S.value <0 )
    5. block (S.L ) ;
    6. /* 让权等待 */
    7. }
    1. void signal (semaphore S )
    2. {
    3. S.value = S.value + 1 ;
    4. if ( S.value > 0 )
    5. wakeup ( S.L ) ;
    6. /*唤醒第一个等待的进程 */
    7. }

    Win32中创建信号量对象API函数是CreateSemaphore( )

    对应的wait操作是wait类函数;

    例如WaitForSingleObject( )WaitForMultipleObjects( )等;

    signal操作对应的API函数是 ReleaseSemaphore( )

    waitsignal操作的物理意义:

    对信号量S的每次wait操作,意味着进程请求一个该类临界资源,因此描述为S.value=S.value-1;当S.value<0时,表示该类资源已分配完,因此进程应调用block原语进行自我阻塞,放弃处理机,并插入到信号量链表S.L(阻塞队列)中。可见该机制遵循了“让权等待”准则。

  • 相关阅读:
    2024 极术通讯-Arm 更新 Neoverse 产品路线图,实现人工智能基础设施
    SaaSBase:什么是CDP集团?
    [安卓逆向]apktool实现APK反编译、重打包、签名
    CAN和CAN FD
    AUTOSAR知识点 之 Dcm (一):基础知识梳理
    centos或aws linux部署java应用,环境搭建shell
    CSS选择器和样式[补充]
    判断二叉树是否为满二叉树
    Promise 面试常考手写方法汇总
    数据结构·二叉树
  • 原文地址:https://blog.csdn.net/qq_50942093/article/details/127540523