24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1495  |  回复: 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的回帖

sudo

木虫 (正式写手)

推荐把代码放到

【code】
这里
【/code】

其中【】用[]代替

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

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

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

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

sudo

木虫 (正式写手)

引用回帖:
Originally posted by wahaha2000 at 2011-06-09 22:14:41:
再比如下面的代码:

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

呃,似乎你没有理解我说的【code】【/code】的意思呢

用它们把代码圈起来之后,效果是这样的(中文的【】换成英文的[])
CODE:
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) ;这句是等待counter!=BUFFERSIZE情况的出现~如果一直满足counter == BUFFER_SIZE,这个循环就不停止,一直继续检查~

一旦counter!=BUFFERSIZE了,那么就接着执行下面的代码了
6楼2011-06-09 22:20:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 wahaha2000 的主题更新
信息提示
请填处理意见