目的: 檢驗學員對並行程式設計和 CS:APP 第 9 章的認知
作答表單: 測驗 1 (針對 Linux 核心「設計」課程)
作答表單: 測驗 2 (針對 Linux 核心「實作」課程)
1
以下程式碼依據論文〈Lock-Free Linked Lists and Skip Lists〉,嘗試實作 non-blocking singly-linked list,參見 gist,新增和刪除的操作建立在一個 key 值唯一且由小到大排序的鏈結串列。已知測試程式碼不會遇到任何 assert 錯誤。
請補完程式碼,使其運作符合預期。作答規範:
AAAA
為 enum identifierBBBB
, CCCC
, DDDD
為表示式,請以最精簡的 C11 程式碼撰寫,不包含小括號 (即 (
和 )
)延伸問題:
2
以下嘗試運用 CS:APP 第 9 章 提到的 mmap(2) 撰寫簡易的記憶體配置器,編譯和測試:
$ cc -c -Wall -Wextra -I. -O2 -std=gnu99 alloc.c -o alloc.o
$ cc -Wall -Wextra -I. -O2 -std=gnu99 test.c alloc.o -o test.elf
$ ./test.elf
參考執行輸出:
largest successfull alloc: 136 GB
程式碼可見 alloc (部分遮蔽),已知測試程式碼不會遇到任何 assert 錯誤。
請補完程式碼,使其運作符合預期。作答規範:
AAAA
為 identifierBBBB
和 CCCC
為表示式,請以最精簡的 C11 程式碼撰寫,不包含小括號 (即 (
和 )
)對照:
延伸閱讀:
mmap-malloc 支援多執行緒