一组并发进程共享某些变量,一个进程的执行可能影响并发进程的结果,这种进程称为「交往并发进程」。
对于一组交往的并发进程,执行的相对速度无法相互控制,各种与时间有关的错误就可能出现。与时间有关错误有两种表现形式:结果不唯一和永远等待
结果不唯一问题可以用飞机票售票问题解释,而永远等待问题可以用下面的例子解释。先定义申请内存和归还内存的两段代码
void borrow(int B) {
if (B>X):
{/*进程进入等待内存资源队列*/; }
X=X-B;
/*修改内存分配表,进程获得内存资源*/;
void return(int B) {
X=X+B;
/*修改内存分配表*/;
/*释放等内存资源进程*/;
}
若某时刻,进程 A 已获得 300 M 内存,运行一段时间后为释放内存,需再申请150M内存;进程B, 已获得 200M 内存,运行一段时间后为释放内存,需再申请 120M 内存;
内存总量为1000M,其中400M为系统区,600M为用户区。此时进程 A 与 B 陷入无限期互相等待(等待对方释放内存)