各位前辈,请赐教!(一个关于操作系统的问题?)
这是一个关于使用P,V原语实现进程同步的问题:
var n,produned,consumed:interger;
program ex4;
procedure prod2(consumed,produced:integer);
var i:integer
begin
for i:=1 to 1000 do
begin
P(consumed); //(1)
n:=n+1;
V(produced);
end
end;
procedure cons2(consumed,produced:integer);
var i:integer
begin
for i:=1 to 1000 do
begin
P(produced);
print('n is:',n);
V(consumed);
end
end;
begin
n:=o; //全局变量N初值为0
cosumed:=o; //建立一个初值为0的信号量
produced:=1; //建立一个初值为1的信号量
resume(create(prod2,"prod",consumed,produced));
resume(create(cons2,"cons",consumed,produced));
end.
书中说:“这里采用了俩个信号量实现同步控制,信号量produced初值为1,所以,对cons2的调用不会阻塞,cons2可以打印n的初值。”但是,当进行到标号(1)的那一行语句时,执行了P原语,当前进程就被阻塞了,后面的n:=n+1那一行和V原语那一行怎么会执行呢?真是怪哉!!!!望各位高手指点迷津,小生在这里谢过了!!!!!!
可以发到小生的邮箱里:yangtao76@eyou.com
问题点数:20、回复次数:3Top
1 楼stellaxyq(汐)回复于 2001-07-04 11:58:41 得分 20
信号量阻塞是对线程来说的
两个线程开始运行的话,一开始(1)会阻塞
但你打印好了n的值以后,做了V(consumed)操作吧,这时consumed就被释放了,然后(1)就可以继续运行了!!
记住它是两个线程在运行,两个,而不是一个,它们之间可以互相阻塞和释放的。一个阻塞的话,它就会自动放弃对cpu的控制,而让别的线程可以占用cpu资源来运行,这样的话可以理解了吗?Top
2 楼benneng(本能)回复于 2001-07-05 10:08:49 得分 0
多谢,请问也就是说释放后,cosumed的值又成了0了吗?Top
3 楼stellaxyq(汐)回复于 2001-07-05 11:05:26 得分 0
对
具体的实现要看你的p,v是怎么写的了Top
相关问题
- 请问各位前辈:怎样判断客户端的操作系统是中文还是英文的呢?
- 各位前辈,,用C#开发的软件能在哪几种操作系统上运行呀??
- 请问各位高手安装2000.98双操作系统的问题
- 请各位帮忙翻译一下(这是关于操作系统的文章)
- 请问各位高手,在TC2.0中如何操作系统时间?
- 急需Windows .net Server操作系统的激活CDKEY,请各位帮帮忙!
- 请问各位如何显示操作系统版本?如win98、2000、xp等。
- 请问各位大虾,WindiowsXP2的操作系统可以装SQL2000吗?
- 本人准备开发一套商场pos系统,请各位有经验的前辈提点建议!包括使用的操作系统,编程语言以及主要解决的问题等。
- 请教:ATL操作系统兼容性




