[理工] [OS] test&set

看板Grad-ProbAsk作者 (Eric)時間12年前 (2012/02/11 12:09), 編輯推噓2(2017)
留言19則, 4人參與, 最新討論串1/1
while( waiting[i] and key ){ key = Test_and_Set(lock); } 和 while( waiting[i] and Test_and_Set(lock) ); 講義上是寫第一個 沒提到第二個 猜想是有瑕疵 請問 除了第一個會先跑一輪 還有別的差別嗎? 不用第二個的原因在哪? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.41.177

02/11 12:32, , 1F
我很久沒寫程式了 所以不知道有沒有想錯 我是認為
02/11 12:32, 1F

02/11 12:33, , 2F
Test_and_Set(lock)不是VOID 是有傳回值 所以需要一個變
02/11 12:33, 2F

02/11 12:35, , 3F
數來接收Test_and_Set(lock)的結果 當然,如果我的想法
02/11 12:35, 3F

02/11 12:36, , 4F
錯誤,那麼再從另一個角度來看。第二個while如果卡住了
02/11 12:36, 4F

02/11 12:36, , 5F
要它執行什麼事情?應該要插NOOP 不過這裡我不知道能不能
02/11 12:36, 5F

02/11 12:37, , 6F
= = 所以我想講義只用第一個While不用第二個 可能是為了
02/11 12:37, 6F

02/11 12:39, , 7F
增加可讀性而已 如果拿第二個跟我同學解釋 我也不太會解
02/11 12:39, 7F

02/11 12:39, , 8F
釋....囧
02/11 12:39, 8F

02/11 13:02, , 9F
恩...回傳這樣寫沒問題 然後因為用c所以沒標nop
02/11 13:02, 9F

02/11 13:03, , 10F
講義前面有提個 while( test_and_set(loct) );
02/11 13:03, 10F

02/11 13:04, , 11F
會有starvation 所以加了個wait[]
02/11 13:04, 11F

02/11 13:05, , 12F
但除了加wait 還把test_and_set寫到condition後
02/11 13:05, 12F

02/11 13:05, , 13F
抱歉前面沒講清楚
02/11 13:05, 13F

02/11 17:37, , 14F
我知道你在問什麼 這是Algo2 一般只有教waiting[i]移除
02/11 17:37, 14F

02/11 17:37, , 15F
我剛剛想了一下流程 我覺得好像可以..
02/11 17:37, 15F

02/11 17:38, , 16F
雖然waiting[i] and test-anf-set(lock)會拆成3行組語
02/11 17:38, 16F

02/11 17:40, , 17F
只是用key這樣寫 比較容易了解吧 key=進入鑰匙
02/11 17:40, 17F

02/11 19:56, , 18F
感謝兩位 這應該不是啥重要問題 只是卡著就很悶orz
02/11 19:56, 18F

09/11 14:55, , 19F
我知道你在問什麼 這是 https://daxiv.com
09/11 14:55, 19F
文章代碼(AID): #1FDUe8o_ (Grad-ProbAsk)