Try   HackMD

2023q1 第 15 週測驗題

目的: 檢驗學員對並行和多執行緒程式設計和《Demystifying the Linux CPU Scheduler》的認知

作答表單

測驗 1

考慮我們想要實作一個 lock-free 的 single-producer/single-consumer (SPSC) 並行程式,底層使用 ring buffer,且避免 false sharing。程式碼可見: main.c (部分遮蔽)

編譯方式:

gcc -Wall -O2 -I. -o  main main.c -lpthread

測試程式的參考輸出: (其中 4 指定 4 個處理器核)

$ ./main
consumer 1:  ---2----
producer 0:  ---1----
consumer 2:  ---4----
Consumer created...
consumer 3:  ---6----
Consumer created...
Consumer created...
producer 7 cycles/op
consumer: 21 cycles/op
consumer: 21 cycles/op
consumer: 21 cycles/op
Done!

其中利用到針對多核處理器的 spinlock: significant optimizations 技巧,對照 cserv 專案的 src/util/spinlock.h

已知執行過程不會遇到任何 assert 錯誤,請補完程式碼,使其執行符合預期。作答規範:

  • AAAABBBB 皆為表示式,不該有括號 (及 ())
  • 以最精簡的形式作答