# 回顧 2016q1 Homework2 ###### tags: `sysprog2016` :::info 主講人: [jserv](http://wiki.csie.ncku.edu.tw/User/jserv) / 課程討論區: [2016 年系統軟體課程](https://www.facebook.com/groups/system.software2016/) :mega: 返回「[進階電腦系統理論與實作](http://wiki.csie.ncku.edu.tw/sysprog/schedule)」課程進度表 ::: ## phonebook-concurrent - [ ] LanKuDot (李昆憶): [共筆](https://hackmd.io/s/HJFhaiAp) * 用 valgrind 檢查有無 memory leak 的問題。他發現原本 吳彥寬 同學撰寫的程式碼中,malloc 28次,卻只有 13 次 free。 如何修正 memory leak 呢?做了以下分析: * 既然 THREAD_NUM 是在 compilation 時期指定,則隨 THREAD_NUM 變動的 array 長度可以不用使用 malloc thread_args 的元素也是透過 malloc 取得,要 free 掉 * 在 findName() 中會給找到的 entry 的 lastname 和 detail 配給記憶體,但是沒有處理已經被搜尋過的 entry 不需要在配置記憶體的情況,像在主程式中搜尋 zyxel 就有三次,造成前兩次配置的記憶體遺失。 - [ ] c14006078 (吳彥寬): [共筆](https://hackmd.io/s/BykQDVTp) * 思考到一個很基本的問題:malloc 和 assert 往往要針對不同型態,撰寫不同版本的定義,能否透過類似 C++ template 來實做呢?C11 有 _Generic 關鍵字,可做出類似的效果。 * 使用可以很精巧,可見共筆的 "Template in C" 一節。 - [ ] TempoJiJi (邱靖吉): [共筆](https://hackmd.io/s/rymKa4aT) - [ ] tundergod (林文盛): [共筆](https://hackmd.io/s/rk5IVI0a) * 實作lock-free thread pool - [ ] CheHsuan (林哲亘): [共筆](https://hackmd.io/s/rJPYFYRa) * 整理 mmap 和 msync 的資訊。 有了基本概念後,我們可嘗試變更 mmap() 的參數,從 MAP_SHARED 換成 MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS 再對照執行時間的變化。 - [ ] kevinbird61 (瞿旭民): [共筆](https://hackmd.io/s/BJwe5Upa) * 透過 setjmp / longjmp 實作 coroutine 的方式,並且實際撰寫程式來測試,他建立兩個 coroutine: A, B。 * 在他的測試中,setjmp 把資訊儲存於 bufferA 後執行 B routine後,再藉由 longjmp 回到當初於 A routine 中呼叫 B 的位置;藉此可以達到再兩個函式中切換;把 routine A, B 換成兩條thread,便是 thread 間維持 sequential consistency 的實作。