码迷,mamicode.com
首页 > 系统相关 > 详细

进程同步

时间:2018-10-08 22:18:26      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:class   semaphore   RoCE   style   系统   就是   表示   操作   oid   

概念(引入原因)

  协调进程间的相互制约关系。

临界资源与临界区

  一次仅允许一个进程使用的资源称为临界资源(与共享资源对立,有些资源如私有资源,它只能给一个进程使用,不存在临界问题),访问临界资源的那段代码称为临界区。

进程间相互制约关系

同步

  直接制约关系,进程A通过缓冲区向进程B提供数据;当缓冲区空时,进程B不能获得数据而阻塞,一旦进程A将数据送入缓冲区,进程B被唤醒;反之,缓冲区满时,进程A被阻塞,仅当进程B取走数据时,才唤醒进程A。

互斥

  间接制约关系,进程A进入临界区访问临界资源,此时进程B必须等待,当进程A退出临界区,进程B才能进入临界区访问临界资源。

信号量

概念

  用来解决进程同步的一种机制,像是一把钥匙,进程要运行,需要先拿到这把钥匙,通俗点来讲就是在允许的信号量下,进程才能够执行

允许的两个操作

down操作(P操作):将信号量的值值减1;当信号量等于0时,再次down操作会让之后的进程进入等待(阻塞态)

void wait(semaphore S)
{
    --S.value;
    if (S.value<0)
    {
        add this process to S.L;//进程链表L,记录所有等待该资源的进程
        block(S.L);
    }
}

up操作(V操作):将信号量的值加1;特别的,对一个有进程在其上等待的信号量执行一次up操作后,唤醒在其上等待的其中一个进程进入就绪态

void signal(semaphore S)
{
    ++S.value;
    if (S.value<=0)
    {
        remove a process P to S.L;//进程链表L,记录所有等待该资源的进程
        wakeup(P);
    }
}

信号值所代表的含义

当信号量S大于0时表示可用的临界资源数,当等于0时,表示刚好用完;

当信号量S小于0时,其绝对值表示系统中因请求该类资源而被阻塞的进程数目

举例:有两个某类资源,四个进程A、B、C、D要用该类资源;

   最开始S=2,当A进入,S=1,当B进入,S=0,表明该类资源刚好用完;

   当C进入时S=-1,表明有一个进程被阻塞了,D进入,S=-2,表明有两个进程被阻塞了;

   当A用完该类资源时,进行V操作,S=-1,释放该类资源,因为S<=0,表明有进程阻塞在该类资源上,于是唤醒C,C进入就绪态,C发现有一个资源可以用,然后直接转换到运行态,使用该资源;

           当B用完该类资源时,进行V操作,S=-0,释放该类资源,因为S<=0,表明有进程阻塞在该类资源上,于是唤醒D,D进入就绪态,D发现有一个资源可以用,然后直接转换到运行态,使用该资源;

信号量初值与其作用

1.如果初值为0,用来实现同步

2.如果初值为1,用来实现互斥访问

3.如果初值为N(N一般大于1),用来限制并发数目

进程同步

标签:class   semaphore   RoCE   style   系统   就是   表示   操作   oid   

原文地址:https://www.cnblogs.com/Joezzz/p/9757455.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!