24小时热门版块排行榜    

查看: 1933  |  回复: 5
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

wahaha2000

铜虫 (小有名气)

[求助] 请教一个while loop程序的问题

程序的代码如下:


int turn;
boolean flag[2];

do {
     flag=TRUE;
     turn=j;
     while ( flag && turn==j);

         critical section
     
     flag = false;

         remainder section


} while (TRUE);


这是Abraham Siberschatz等写的《操作系统概念(第七版 影印版)》第196页的代码。
我想问的是:语句
while ( flag && turn==j);
有什么作用?我在谭浩强的C语言书和《C语言参考手册》中没找到合适的解答?
非常感谢!
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wahaha2000

铜虫 (小有名气)

再比如下面的代码:

【 while (true)
{
/* produce an item in nextProduced */
while (counter == BUFFER_SIZE) ; /* do nothing */
buffer[in] = nextProduced;
in = (in + 1) % BUFFER_SIZE;
counter++;
}  】

其中【while (counter == BUFFER_SIZE) ; 】起什么作用?

(1)若 counter == BUFFER_SIZE 为真,程序怎么运行?

【buffer[in] = nextProduced;
in = (in + 1) % BUFFER_SIZE;
counter++;

还接着运行吗?

(2)若 counter == BUFFER_SIZE 为假,程序怎么运行?

能否给我推荐一本有此内容的参考书,非常感谢!
5楼2011-06-09 22:14:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 6 个回答

huycwork

金虫 (著名写手)

【答案】应助回帖

wahaha2000(金币+1): 非常感谢 ! 2011-06-09 22:47:22
这个是系统的互斥锁吧,你用谭浩强教的东西怎么能学到这种东西呃~
flag是一个互斥锁,需要进入临界区的进程都把自己的锁设置为true
这里只假设有两个进程,进程1需要进入临街区时就把自己的开关打开,然后去检查另外一个锁,这里分三种情况:
1.另外一个锁被打开了
2.两个进程同时在竞争,本进程竞争失败
3.本进程竞争成功
只有情况3才进入临界区。情况1是检查flag[ 1 - ture ]为true的情况,情况2是ture不指向 j 的情况。
漩涡的中心有一块空地,空空的。
2楼2011-06-09 19:00:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

推荐把代码放到

【code】
这里
【/code】

其中【】用[]代替

while的那句是等待那些标记变量的变化,使得条件不满足之后再继续执行下面的语句

然而你可能会问,那些变量怎么会变化呢?

比如,其中一个可能是在另外的线程改变了那些变量的值

话说那书我没看过,如果你能给出程序的上下文的话,可能更有利于虫友们进行理解
3楼2011-06-09 19:01:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wahaha2000

铜虫 (小有名气)

非常感谢两位虫友的回答。我想问的是:
这个

【while ( flag && turn==j);】

语句应该是C语言中的,但我看到的两本C语言书(谭浩强的C语言书和《C语言参考手册》)中好像没这种用法,我想能不能给我推荐一本有这种用法的C语言书,我仔细去推敲推敲。

本人学数学的,刚拿了本操作系统书看,问的问题有点初级,非常抱歉!
4楼2011-06-09 21:24:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 让我中一个面上吧! +12 大萍1987 2026-08-20 15/750 2026-08-23 20:44 by 大萍1987
[博后之家] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +4 2JOx3r2CYEgw 2026-08-22 6/300 2026-08-23 19:34 by lXgU0RvNTDC9
[博后之家] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +3 2JOx3r2CYEgw 2026-08-22 6/300 2026-08-23 19:31 by lXgU0RvNTDC9
[考博] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +4 2JOx3r2CYEgw 2026-08-22 5/250 2026-08-23 19:22 by lXgU0RvNTDC9
[找工作] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +3 2JOx3r2CYEgw 2026-08-21 5/250 2026-08-23 19:10 by lXgU0RvNTDC9
[找工作] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +3 h4CP7TrQR8Lg 2026-08-22 3/150 2026-08-23 16:30 by lXgU0RvNTDC9
[教师之家] 跳槽后在研项目怎么办? +5 简单化xn 2026-08-22 10/500 2026-08-23 12:38 by 简单化xn
[考博] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +3 2JOx3r2CYEgw 2026-08-21 10/500 2026-08-23 07:17 by OEbVnUOu01ol
[博后之家] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +3 DpSrDtM079iu 2026-08-22 5/250 2026-08-23 04:07 by OEbVnUOu01ol
[硕博家园] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +3 2JOx3r2CYEgw 2026-08-22 7/350 2026-08-23 03:55 by OEbVnUOu01ol
[硕博家园] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +3 2JOx3r2CYEgw 2026-08-22 7/350 2026-08-23 03:43 by OEbVnUOu01ol
[论文投稿] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +3 2JOx3r2CYEgw 2026-08-22 6/300 2026-08-23 03:40 by OEbVnUOu01ol
[论文投稿] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +3 QTy3jDtz1uLt 2026-08-21 9/450 2026-08-23 03:04 by OEbVnUOu01ol
[硕博家园] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +4 QTy3jDtz1uLt 2026-08-21 11/550 2026-08-23 02:55 by OEbVnUOu01ol
[教师之家] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +4 2JOx3r2CYEgw 2026-08-21 4/200 2026-08-22 16:52 by sunzitan
[基金申请] 放榜前的不淡定 40+4 snowwithsea 2026-08-19 14/700 2026-08-21 23:51 by cratir
[基金申请] 今日不放榜?网传国自然预计 8 月 27 日可查结果 +16 医学老男孩 2026-08-20 20/1000 2026-08-21 21:13 by Ldrop2023
[基金申请] 科研孤儿太难了 +17 我4大白菜 2026-08-20 18/900 2026-08-21 20:57 by zhangev
[基金申请] 感觉是下周放榜了 +7 angus9576 2026-08-17 12/600 2026-08-21 13:38 by weiyin
[基金申请] 应该是下周三26日公布了吧? +4 哈哈蛤? 2026-08-21 4/200 2026-08-21 10:58 by Vivilian
信息提示
请填处理意见