信号量及PV操作

信号量及PV操作

  • 一个特殊变量
  • 用于进程间传递信息的一个整数值
  • 定义如下
struct semaphore
{
    int count;
    queueType queue;
}
  • 信号量说明:semaphore s;
  • 对信号量可以实施的操作:初始化、P和V

P、V操作定义

P(s)
{
    s.count--;
    if(s.counnt<0)
    {
        //该进程状态置为阻塞状态;
        //将该进程插入相应的等待队列s.queue末尾
        //重新调度
    }
}

down

V(s)
{
    s.count--;
    if(s.counnt<=0)
    {
        //唤醒相应等待队列s.queue中等待的一个进程;
        //改变其状态为就绪态,并将其插入就绪队列;
    }
}

up

有关说明

  • P、V操作为原语操作
  • 在信号量上定义了三个操作
  • 初始化(非负数)、P操作、V操作
  • 最初提出的是二元信号量(解决互斥)
  • 之后,推广到一般信号量(多值)或计数信号量(解决同步)

用PV操作解决进程间互斥问题

  • 分析并发进程的关键活动,划定临界区
  • 设置信号量mutex,初值为1
  • 在临界区前实施P(mutex)
  • 在临界区之后实施V(mutex)
posted @ 2020-03-05 22:56  insist钢  阅读(742)  评论(0编辑  收藏  举报