# [2022q1](http://wiki.csie.ncku.edu.tw/sysprog/schedule) 第 11 週測驗題 ###### tags: `linux2022` :::info 目的: 檢驗學員對 **[並行和多執行緒程式設計](https://hackmd.io/@sysprog/concurrency)** 的認知 ::: 作答表單: * ==[測驗 `1`](https://docs.google.com/forms/d/e/1FAIpQLScXHrH6hZ6XIJFbQ_knjA9BgkZx2-jbue4PU8bBfVsKN5jOaQ/viewform)== (Linux 核心設計) * ==[測驗 `2`](https://docs.google.com/forms/d/e/1FAIpQLSeqEXwJ4hBCD6fNm6wTLyCjrv5ShTH2_vvPoRRxjB8Gu-aTiw/viewform)== (Linux 核心實作) ### 測驗 `1` 我們嘗試改寫[第 9 週測驗題](https://hackmd.io/@sysprog/linux2022-quiz9)的第二題,使其更精簡,程式碼可見 [gist](https://gist.github.com/jserv/f0167ae3cc61a31c644ac7dbc4d22a22) (部分遮蔽),參考執行輸出: ``` TEST: test_null() TEST: test_not_aligned() TEST: test_init_ok() TEST: test_enqueue() TEST: test_dequeue() TEST: test_empty() TEST: test_full() ``` 程式回傳值是 `0`。注意實作應該要能處理 [ABA Problem](https://en.wikipedia.org/wiki/ABA_problem)。請補完程式碼,使其運作符合預期。作答規範: * `PPPP` 為表示式,請以最精簡的 C11 程式碼撰寫,不包含小括號 (即 `(` 和 `)`) * 依據指定程式碼風格撰寫 --- ### 測驗 `2` 在[第 6 週測驗題](https://hackmd.io/@sysprog/linux2022-quiz6)提及論文〈[Lock-Free Linked Lists and Skip Lists](http://www.cse.yorku.ca/~ruppert/papers/lfll.pdf)〉,以下程式碼嘗試實作 non-blocking singly-linked list,參見 [gist](https://gist.github.com/jserv/1532f87510ba75204edcfecd5efafa83),已知測試程式碼不會遇到任何 assert 錯誤。 請補完程式碼,使其運作符合預期。作答規範: * `XXXX` 為表示式,請以最精簡的 C11 程式碼撰寫,不包含小括號 (即 `(` 和 `)`) * 依據指定程式碼風格撰寫