进程同步与互斥

本文介绍了临界资源的基本概念,包括临界区、同步和互斥的概念,以及如何通过记录型信号量实现资源的请求与释放,确保并发进程间的正确协调与调度。
摘要由CSDN通过智能技术生成

1.基本概念

  • 临界资源:一次仅允许一个进程使用的资源称为临界资源。

        在每个进程中访问临界资源的那段代码称为临界区,把临界资源的访问过程分为4个部分:

do{
    enter section;            //进入区
    critical section;         //临界区   
    exit section;             //退出区
    remainder section;        //剩余区
}while(true)
  • 同步:也称为直接制约关系,是指为了完成某种任务而建立的两个或多个进程,这些进程因为需要某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系。

        例如:输入进程A通过一个缓冲区向进程B提供数据。当该缓冲区空时,进程B不能获取所需的数据而阻塞,一旦进程A将数据送入缓冲区,进程B就唤醒。反之,当缓冲区满时,进程A被阻塞,仅当进程B取走缓冲数据时,才唤醒进程A。

  • 互斥:也称为简介制约关系,当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用临界资源的进程退出临界区后,另一进程才被允许访问此临界资源。

为了禁止两个进程同时进入临界区,同步机制因遵循一下准则:

1)空闲让进

2)忙则等待

3)有限等待

4)让权等待

 

2.记录型信号量

首先采用了记录型的数据结构,描述记录型信号量:

typedef struct{
    int value;
    struct process *L;
}semaphore;

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

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

S.value--;

if(S.value<0){

        add this process to S.L;

        block(S.L);        

        }

}


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

S.value++;

if(S.value<=0){

        remove a process p from S.L;

        wakeup(S.L);        

        }

}

 

 

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值