520深夜混合多執行緒多程序debug總結

2021-09-23 05:06:54 字數 1427 閱讀 1485

居然在圖書館肝到現在,還是520,太有意義了必須紀念下

來先看一下作業(其實很簡單,畢竟原始碼都給我們了,雖然是一堆bug的原始碼,這裡手動打出gg)

第三次作業:

分析矩陣相乘原始碼,畫出程式流程圖,編譯並執行程式。

好的,老規矩,一堆錯誤的源**,其實如果沒有第五條檔案操作要求,一切順風順水。bug不是很多:

乙個是二維陣列的引數傳遞問題,指標陣列和陣列指標,想想就頭疼,這裡參考了很多博主的博文,現在還是有點暈,好在並不難,照著經驗很快就解決了這個bug。

第二個就是發現在執行的時候,矩陣求出來的結果總是會有重複的,特別是當程序數不同的時候,於是仔細查**,發現是下標的問題,如果程序數小於矩陣維度的時候,有一行會被反覆求,而不是再分配。總之這兩個bug比較簡單,可以說良心了。

於是,我看時間還多,就想想思考題:什麼情況下會有死鎖呢?可惜自己作業系統知識淺薄,真的沒想到(還是太菜,這裡捂臉)。然後準備把,檔案操作秒了,**都調通了,檔案操作就是小事了吧。然而事實並不是這樣的,加入檔案操作,調**要死啊!!!

首先,兩個矩陣讀入的問題,秉承堅決不重複勞動的思想,用乙個for迴圈,分兩次讀入兩個矩陣檔案,此處借鑑了print函式的操作,以及二維陣列動態分配記憶體。小bug不說了,結果出現了段錯誤!我的個神啊!最怕陣列溢位這種問題了。而且我還不會(也不想花時間)多程序的除錯,只能print除錯法(好吧print**好)。然後,找了半天,最後很無語,原理是瘋狂用int i作迴圈變數,然後i的值改了好幾次!我的神啊!!這種sb錯誤,我居然花時間這個上面....無語了,以後一定要記住!!

然後,讀入了矩陣,然後遇到了第二個抓狂的報錯!:什麼什麼terminate, exit code 11,上網查錯誤**,好的沒有。好的手動gg! 繼續pirnt**(好吧,我真的會print)然後發現這個八成是矩陣存不進去啊!大概是malloc錯誤,此時快**了,對記憶體錯誤毫無還手之力,好的,仔細查,再看看genmat原始碼。咦?怎麼這裡存進去的是double,我的主程式預設是float!!啊一查,double 2位元組好像(管他啥),反正float比他小!!我的個神!!改老師原始碼!!!一通亂改,老師輔助程式已經面目全非了。

然後,怎麼寫檔案啊!!不能向print那樣一行行輸出了,因為想借鑑matgen的做法,一起操作然後寫入檔案,而且由於老師需要用print函式列印出來,所以寫入格式必須和matgen一樣。ok,繼續改**,借鑑**。發現不對啊!怎麼檔案的矩陣和print矩陣不一樣啊!!應該一樣啊!!抓狂!此時已經過1點了!!繼續print,好的發現,檔案輸入好幾次!!???又是多程序的問題!!額的神,聯想起第一次作業!!此時準備放棄,哭了,我不想猝死!!去上了趟廁所,中途出去走走或者上廁所真的對我的debug有神助攻!多次經驗!靈機一動!應該在主程序完成收尾工作啊!!對啊!然後機智的解決了,測了兩個樣例,emmmm好像沒問題,不想再發現bug了,饒了我吧,我枯了!!

好的,踩坑認識,520快樂。我愛並行程式設計!好了,我要去睡覺了。。。。

多執行緒 多程序?

這幾天在思考如何改進原型在多個客戶端的情況下的效能,特地溫習了一下多程序和多執行緒的一些知識。在linux下程序的程序和執行緒在核心看來區別很小,都是乙個可排程單元,都擁有記憶體管理結構等等。但是關鍵的差別是程序的資源都是私有的,而執行緒則是和別人共享的,所以執行緒的上下文切換可能比程序的開銷要小很...

多程序,多執行緒

多工程式設計 通過應用程式利用多個計算機核心達到多工同時執行的 目的,從此來提公升程式執行效率 多程序,多執行緒 程序 程式在計算機中一次執行的過程 程式 靜態的描述,不占有計算機資源 程序 是乙個動態的過程,占有cpu,記憶體等計算機資源 有一定的生命週期 同乙個程式,每次執行都是不同的程序,因為...

多執行緒 多程序

是什麼?能幹什麼?單執行緒情況下,執行效率低。系統的資源沒有得到充分利用。計算密集型 運算量比較大 io密集型 cpu空閒,輸入輸出較多 怎麼幹?爬蟲 io密集型 多執行緒 橫向 所有的程式的執行都在乙個執行緒中,程式啟動時,啟動多執行緒,每個執行緒跑同樣的 縱向 將程式進行拆分,每個執行緒跑特定的...