# [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 程式碼撰寫,不包含小括號 (即 `(` 和 `)`)
* 依據指定程式碼風格撰寫