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


    信号量(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(阻塞队列)中。可见该机制遵循了“让权等待”准则。

  • 相关阅读:
    【UR #7 C】水题走四方(DP)
    2022-06-28 工作记录--React-react-intersection-observer实现图片在可视范围内时加上其对应动图
    如何读LVS报告
    蓝桥杯 题库 简单 每日十题 day13
    d的is表达式
    【精选】自学网络安全的三个必经阶段(含路线图)
    各种锁机制
    游戏复用列表实现思路
    C#学习 - 表达式、语句
    Linux--进程控制(1)
  • 原文地址:https://blog.csdn.net/qq_50942093/article/details/127540523