与时间有关的错误

一组并发进程共享某些变量,一个进程的执行可能影响并发进程的结果,这种进程称为「交往并发进程」。

对于一组交往的并发进程,执行的相对速度无法相互控制,各种与时间有关的错误就可能出现。与时间有关错误有两种表现形式:结果不唯一和永远等待

结果不唯一

结果不唯一问题可以用飞机票售票问题解释,而永远等待问题可以用下面的例子解释。先定义申请内存和归还内存的两段代码

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 陷入无限期互相等待(等待对方释放内存)

img-2024-05-17 19-06-42.png

竞争与协作