飞机票售票问题

「飞机票售票问题」是解释交往并发进程中的一个重要例子。例如下面的代码

void T1() {
	{按旅客订票要求找到Aj};
	int X1=Aj;
	if(X1>=1) {
		X1--;
		Aj=X1;
		/*输出一张票*/;
	}
	else
		/*输出信息"票已售完“*/;
}

void T2() {
	{按旅客订票要求找到Aj};
	int X2=Aj;
	if(X2>=1) {
		X2--;
		Aj=X2;
		/*输出一张票*/;
	}
	else
		/*输出信息"票已售完“*/;
}

如果上面两个进程几乎同时运行,即下图中的情况一,出现了对 X 变量的使用,导致虽然两个人都买了票,理论上应该售出两张票,但结果却为 X = X+1

img-2024-05-17 18-55-36.png