[問題] while條件式

看板C_and_CPP (C/C++)作者 (inbox)時間16年前 (2009/09/18 01:14), 編輯推噓1(107)
留言8則, 5人參與, 最新討論串1/1
do { flag[i] = TRUE; while (flag[j]) ; <<<-----重點區 critical section flag[i] = false; remainder section } while (1); ----------------------------------------- 以上是OS在解決同步問題的一段程式碼 我想請問的是 如果像這樣 while(條件式); 後面直接加上分號 沒有連接敘述式 那麼當條件式成立的時候....while(條件式); 之後的程式碼都不會執行了 請問這樣是正常的嗎?? 我大概了解那段程式碼的意義... 是說當flag[j] = = 0 的時候 程式才會往下走 我也寫了一些相同的語法用DEVC++跑 發現真的是這樣 但我是嫩咖 第一次遇到這樣的手法來表示不讓程式碼往下跑 心中總是有點疑惑 所以想請問大家 我這樣的理解有正確嗎??囧 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.36.29.75

09/18 01:17, , 1F
flag[j]成立時會一直卡著 直到不成立才會繼續往下跑吧
09/18 01:17, 1F

09/18 01:20, , 2F
恩恩 flag[j]為0的時候才不成立 然後往下跑...對吧??
09/18 01:20, 2F

09/18 01:32, , 3F
對啊~~基本上就是搞個迴圈做busy waiting吧....
09/18 01:32, 3F

09/18 01:35, , 4F
可能是讓別的thread把值改掉變成0
09/18 01:35, 4F

09/18 02:10, , 5F
我看過的程式碼好像多比較喜歡用WaitForSingleObject
09/18 02:10, 5F

09/18 02:10, , 6F
來做這種事情...
09/18 02:10, 6F

09/18 02:17, , 7F
這是OS恐龍本的範例 只是為了說明而已
09/18 02:17, 7F

09/18 02:18, , 8F
實務上 busy waiting 絕不是個好主意 XD
09/18 02:18, 8F
文章代碼(AID): #1AicvOF0 (C_and_CPP)
文章代碼(AID): #1AicvOF0 (C_and_CPP)