操作系统 二进制信号量或互斥量

操作系统 二进制信号量或互斥量

在计数信号量中,没有提供互斥性,因为我们有一组需要同时执行临界区的进程。

然而,二进制信号量严格提供互斥性。在这里,临界区中只能有最多1个进程,而不是多个可用槽位。信号量只能有两个值,0或1。

让我们看看二进制信号量的编程实现。

StructBsemaphore
{
    enum Value(0,1); //value is enumerated data type which can only have two values 0 or 1.
    Queue type L;
}
/* L contains all PCBs corresponding to process 
Blocked while processing down operation unsuccessfully. 
*/ 
Down (Bsemaphore S) 
{
    if (s.value == 1) // if a slot is available in the 
    //critical section then let the process enter in the queue. 
    {
        S.value = 0; // initialize the value to 0 so that no other process can read it as 1. 
    }
    else
    {
        put the process (PCB) in S.L; //if no slot is available 
        //then let the process wait in the blocked queue. 
        sleep(); 
    }
}
Up (Bsemaphore S) 
{
    if (S.L is empty) //an empty blocked processes list implies that no process 
    //has ever tried to get enter in the critical section. 
    {
        S.Value =1; 
    }
    else
    {
        Select a process from S.L; 
        Wakeup(); // if it is not empty then wake the first process of the blocked queue. 
    } 
}

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程