看板 Grad-ProbAsk 關於我們 聯絡資訊
※ 引述《eddiejacky (eddiejacky)》之銘言: : ※ 引述《pigyellow ( ~犬!)》之銘言: : : 共享變數宣告: : : mutex: Semaphore = 1 (提供對Monitor的互斥控制) : : next: Semaphore = 0 (儲存發出x.signal的P) : : next_count: Integer = 0 (儲存發出x.signal的P的個數) : : x_sem: Semaphore = 0 (儲存發出x.wait的P) : : x_count: Integer =0 (儲存發出x.wait的P的個數) : : x:condition 變數之製作 : : 製作 x.wait : : x_count = x_count + 1 : : if next_count > 0 then signal(next); <----這行的意義 : : else signal(mutex); : : wait(x-sem); ^^^^^^^^^^ 請問為什麼不是這行來確保Hoare 而是上面的 signal(next)呢? : : x_count = x_count -1; <----為什麼要回扣 : : 製作 x.signal : : if x_count > 0 then : : begin : : next_count = next_count + 1; : : signal(x-sem); : : wait(next); <----這行的意義 : : next_count = next_count - 1; : : end : : 小弟不太了解這幾行的目的是什麼 : : 希望有人可以幫忙解說一下 : : 謝謝 : Q1:確保 Hoare性質 : Q2:因為某個在waiting queue 被救起來,所以在waiting queue裡的process總數要減一 : Q3:確保 Hoare性質 : Hoare性質: : 當Q發出 x.wait 而block住 : 而P發出 x.singal 去救Q,P必須先自己block住,等到Q完成或再度block住 : 才能恢復執行 另外想請問external procedure F 會被換成 wait(mutex); ... body of F ... if(next_count>0) signal(next); //這行看不懂它的意思:( else signal(mutex); //這行是不是指"現在monitor沒人使用了, //解鎖讓外面的process使用" 該怎麼和上面的x.wait()與x.signal()配合? 我看了好久還是看不出來 T_T 謝謝各位~~ ※ 編輯: thanksgive 來自: 61.224.223.52 (07/31 21:52)
thanksgive:if next_count > 0 then signal(next);是確保Hoare 08/01 00:36
thanksgive:沒錯,想了好久QQ signaler要resume的兩可能分別是 08/01 00:37
thanksgive:在Q離開或再度等待時,也就是body F和x.wait的 08/01 00:38
thanksgive:signal(next); 08/01 00:39