操作系统 第二章 4 信号量基本应用

1、实现进程互斥

注意:

  • 互斥信号量mutex初值为1
  • 每个进程中将临界区代码置于P(mutex)和V(mutex)原语之间;
  • 必须成对使用P和V原语(在同一进程中),不能次序错误、重复或遗漏: 遗漏P原语则不能保证互斥访问 遗漏V原语则不能在使用临界资源之后将其释放(给其他等待的进程);

seamphore  m=1;

void main()

{cobegin p1; cobegin p2; } 

p1{ wait(m); user r; signal(m); }

p2{ wat(m); user r; signal(m); }

2、实现进程有序

注意:

  • 信号量值为0的点是限制的关键所在;
  • 成对使用P和V原语(在有先后关系的两个进程中),不能次序错误、重复或遗漏,否则同步顺序出错。

    并发执行的进程P1和P2中,分别有代码C1和C2,要求C1要在C2开始前完成; 为每对前趋关系设置一个同步信号量S12,并赋初值为0。则只有V操作所在进程获得cpu时能运行。

用可能错误的顺序验证:

ep:

设有一供者和一用者,如何用信号量来控制二者对缓冲区的同步使用。

seamphore  s=0;

void main()

{cobegin p1; cobegin p2; } 

p1{ f=c1();   signal(s); }

p2{ wat(s);  c1(f); }

3、实现计数控制

seamphore  s=5(个数,这里假设是5);

void main()

{cobegin p1; cobegin p2; } 

p1{wat(s);  user  r;}

p2{ wat(s);    user  r;}

猜你喜欢

转载自blog.csdn.net/weixin_43214005/article/details/82829202