2013-12-15 79 views
3

我有我需要解決的一個問題,現在的問題的解釋:線程和信號燈解決方案

  • 我有n個學生螺紋
  • 我有一個老師螺紋
  • 教可以協助只有一個學生在時間
  • 學生們應該打電話給老師尋求幫助,所以當第一個學生來到TA時,其他學生來找到TA很忙就得等到椅子上,只有3把椅子
  • 其他學生過來發現椅子已滿,必須稍後復出
  • 如果老師沒有學生被協助,他會檢查椅子上的學生,如果沒有他會去睡覺(什麼都不做)

這個問題必須使用線程和信號量來實現。

回答

0

建議:

1)我將有一個老師線程和N線的學生(比如你)。

2)我會有一個信號量。

3)我會有一個椅子陣列(你的「隊列」);每個元素初始化爲-1。

4)每次教師可以看到學生,他鎖定陣列,挑選一名學生,「清理」椅子,並解鎖陣列。

5)每次學生想要等待時,他都會檢查是否有空閒椅子,鎖定陣列,「設置」椅子以及解鎖陣列。

6)我會馬上「malloc()」,然後初始化椅子數組,只要你知道你會有多少學生。 7)如果這是C++,「老師」,「學生」和「椅子」將分別是類。

恕我直言...

+0

請問這是我在做什麼,但不是在執行一個陣列的麻煩去,我進出 – ykh

+0

我用了一個信號量與4個值,其遞減與遞增與每一個學生我正在嘗試你的解決方案,但你能告訴我如何處理第一個進來的學生,我的意思是沒有加入隊列的那個 – ykh