本次作業是我第一次接觸多執行緒,建立了請求模擬器、排程器和電梯執行三種執行緒。請求模擬器負責在輸入後識別有效請求;排程器在掃瞄有效請求後將新的請求加入請求佇列,並掃瞄三部電梯的資訊,最後遍歷請求佇列中的請求進行排程,並根據得到的資訊進行請求狀態和請求佇列的更新;電梯執行執行緒則根據得到的資訊進行運動,同時改編電梯資訊。實現多執行緒功能中最大的挑戰是實現共享資料的安全、避免衝突(一開始沒有加synchronized修飾符導致出現很多bug),因此在與同學討論後,採用了將所有方法都加上synchronized修飾符的方法來避免資料衝突(當然這樣也一定會導致一些bug)。
第六次作業是檔案及資料夾的監控與管理。遵循「將每乙個新的監控變成乙個新的執行緒」的原則,很多個執行緒不斷的掃瞄,如果有滿足監控條件的觸發情況,則完成觸發,同時更新快照以便下一次判斷。考慮到file的不安全性,設定執行緒安全的safefile類,並對於所有方法都上鎖。
本次作業的執行緒主要分為三類:計程車、排程器、輸入。首先是100個計程車執行緒,考慮到安全問題,對於其中的快照資訊進行加鎖。其次是排程器執行緒,通過掃瞄得到計程車的快照,然後遍歷請求對列,判斷計程車是否符合規定的資訊,得到最後的資訊後則更新計程車及佇列的狀態。輸入執行緒則迴圈接受輸入,檢查有效與同質資訊並輸出指定資訊。佇列及請求類的所有方法都上鎖以確保執行緒安全。
類圖:
自我點評:
第二次作業·ifttt
類圖:
第三次作業·計程車系統
類圖:
公測&互測:對方未進行測試
除錯:由於是第一次寫多執行緒,所以導致沒有思路,遲遲沒有開工,一開始忘記加鎖導致出現許多難以預料的問題。最終對執行緒進行加鎖處理,實現了資訊的相互傳遞,才得以順利完成。
測試程式:本次作業分配到的作業為無效作業,輸入任何請求都顯示輸出格式錯誤。
公測:關於目錄下的一系列測試沒有通過
互測:無
分析:本次作業是自己對於指導書的理解不夠透徹,在關於目錄的一些操作都會報錯而不是按照要求進行移動。
測試程式:本次測試任務有非常多的bug,對於一般的請求都會報錯和crash,難以進行測試。但對於某些簡單樣例能夠通過。
公測:全部通過
互測:對於輸入的不合理請求沒能報錯,反而導致了crash。最終分析是由於正規表示式沒有寫好的原因(暴打自己狗頭一萬遍)。
除錯:測試太麻煩,沒有進行很好的測試,所以才會出現低階錯誤。據可愛的助教說,我的程式出現了gui會跳的問題,所以之後應該會進行改動。
測試程式:本次測試任務總體來說還算可以,但是對於計程車的搶單沒有處理好,導致在多個計程車搶單時沒能選擇信用值最高的那個,而且也沒有輸出位置資訊。
這三次作業的難度比起前幾次可謂難度上了一層樓,前幾次大概還在「1+1=2」,這幾次就到了求導,寫第五次作業時完全沒有思路,急的嘴角都攢起了泡,不過最後還是有驚無險,同舍友一起渡劫。由於對方沒有給我公測和互測,對於我第五次作業的bug也沒有乙個很好的認識。但就自己之後的除錯和反思,第五次作業程式**太過冗雜而無法修改,形成了牽一髮而動全身的狀態,這是自己之前沒有寫好導致的。第六次作業是自己認為最難的一次作業,指導書的難以理解度已經超出了我的想象,所以也導致了不理解下的很多bug。
縱觀這三次作業,難就難在不好除錯,第五次作業還好,輸出資訊一目了然,但第六次作業對於深度和廣度的遍歷實在是太痛苦了,本人又沒有紮實的c語言功底,只能自己手動構建資料夾,真是不堪回首的一段記憶……至於第七次作業那就更是玄學了,計程車肆意亂跑,也就胡亂除錯了一下……
黑眼圈已經重到媲美眼影的程度,還好有假期能休息一下23333好好閱讀指導書,閱讀指導書的日子讓我不由想起了傳說中的甲方的種種要求啊!總體來說,苟活下來就是勝利。
OO第二次部落格作業
從第4次作業開始,就進入了多執行緒程式設計的環節。我個人對於多執行緒的理解就是在乙個程式在執行時有多個執行流,能夠實現多個執行緒併發執行的技術。由於能在同一時間內執行多個執行緒,因而能夠提公升計算機的整體處理效能。第五次作業分析 由於第五次作業是我第一次接觸到多執行緒程式設計,因此這次作業對於我來說...
OO第二次部落格作業
第五次作業和第六次作業因為一些個人原因被判了無效所以這裡就不拿出來分析了 捂臉 第七次作業 設計乙個簡單的計程車排程系統 類圖 度量分析 其實在剛看到指導書的時候,覺得排程規則十分複雜。週日看了一下午指導書之後才大概想到一點思路,接著就開始了一步步嘗試。其實這次作業的目標十分明確,每個執行緒的任務很...
OO第二次部落格作業
在多執行緒的海洋裡遨遊了三周後,同學們又有了這難得的乙個月一次的oo部落格 休息 時間。多執行緒的各種 玄學 問題可是給我帶來了不少困擾和麻煩。而且這三次作業的共性特點就是特別難debug,不僅是難以給自己debug,給別人debug也不容易。就趁這個時間來回顧下這三周的時光吧!1.簡述 經過了傻瓜...