- 进程的并发执行不需要信号量来控制
- 临界资源是互斥共享资源,非共享数据不属于临界资源
- 临界资源和共享资源https://blog.csdn.net/qq_42615475/article/details/130329524
- 判断是否为临界资源:
- 1)得是共享资源
- 2)不能并发
-
-
同步关系:进程A放完了B才能往缓冲区读数据
互斥关系:共享缓冲区的访问一定是互斥访问的
- P、V操作是一种低级进程通信原语,它是不能被中断的
- 可重入代码 (Reentry code)也叫纯代码 (Pure code)是一种允许多个进程同时访问的代码。 为了使各进程所执行的代码完全相同,故不允许任何进程对其进行修改。 程序在运行过程中可以被打断,并由开始处再次执行,并且在合理的范围内(多次重入,而不造成堆栈溢出等其他问题),程序可以在被打断处继续执行,且执行结果不受影响。 可重入最简单的理解就是任何变量都是局部变量。 可重入指函数在运行过程中,被中断打断后,待返回时仍然能够正常运行。
- 可重入代码:允许多个进程同时访问+只读+不能被修改+可共享
-
这里临界区是指访问临界资源A的那段代码,有5个并发进程,共有5个操作共享变量A的代码段
- 管程的组成部分:
monitor Demo{
共享数据结构S;
condition x; //定义一个条件变量x
init_code{}{...}
take_away(){
if(S<=0) x.wait(); //资源不够,在条件变量x上阻塞等待
资源足够,分配资源,做一系列相应处理;
}
give_back(){
归还资源,做一系列相应处理;
if(有进程在等待) x.signal();//唤醒一个阻塞进程
}
}
条件变量和信号量的比较:
相同点:类似于信号量的P/V操作,可用于进程的阻塞/唤醒;
不同点:条件变量没有值,仅实现了“排队等待”的功能,而“信号量”是有值的
n-1 n
- 互斥信号量的初值都为1
- 所谓互斥使用某临界资源,是指在某一个时间段只允许一个进程使用此资源。