contributed by < yuyuan0625 >
作者在大學畢業前自行研發自動飲料機,途中就是不斷的遇到問題並且需要在有限的資源、設備之下解決。 令我印相深刻的是 Jserv 告訴作者: 「青春很貴,你也知道實習會發生什麼事,公司不會指派重要的工作給你,他們只會指派低風險的工作,你學習到的東西並不會比你現在多。你該學習的不是看到事情要完蛋了就去避免失敗,而是應該學習如何處理與承受失敗,你才能變得比以前更強大。」 我們在大學甚至研究所時期幾乎都只有應付學校中大大小小的考試和期末專題,從來沒有真正的解決生活周遭的事情,缺乏解決問題的能力。
運用 bit-wise operator
x & (x - 1) == 0
在 C 語言中表示:
將字元轉成小寫: 免除使用分支
\ ' '
即可讓代表 32 的位元設為 1 ,達到大寫轉小寫的作用。& '_'
( _ = \(0\ 1\ 0\ 1\ 1\ 1\ 1\ 1\ 1_2\)), ^ ' '
來分別達到將字元轉為大寫和大小寫互轉常見雜湊函數作法:
TODO
想比照比較同頁面下方 "golden ratio 與非 golden ratio" 的實驗方法,觀察這四值種 hash function 在輸入為亂數時發生碰撞的情形
static
表示該 function 的有效範圍僅在同一個檔案內,避免到時候 linking 的時候有多個檔案擁有相同的函式名稱,造成重複定義。Static Single Assignment, SSA
在編譯器最佳化中程式碼可能會被重新排列
Threads
兩者應用場景不同、不要問題放一起比較
mutex | semophore | |
---|---|---|
出現時間 | 較晚 (2.6.16版) | 較早 |
解鎖 | 只能由上鎖的 thread 解鎖 | 可由原本的 thread 或是另外一個 thread 解開 |
可進入 critical section 之 thread 數量 | 1個 | 多個 |
應用場景 | 常使用在 critical section 只能有一個 thread 進入,而且要避免 priority inversion 的時候 | 常用在同步兩個 thread 或功能上面,因為 Semaphore 實際上使用的是 signal 的 up 與 down,讓 Semaphore 可以變成是一種 notification 的作用,例如 A thread 執行到某個地方時 B thread 才能繼續下去 |
priority inversion | 無 | 有 |
thread-local storage (tls): 給 thread 一個專屬的空間 (不和其他 thread 共享)
Native POSIX Thread Library (NPTL): 一對一
semophore
用 semaphore 控制總量、 nutex 控制 mutual exclusion
第二週 C 語言: 數值系統
不明白為何 lookup table 的內容是這樣設計,也無法理解為何是乘上0x07C4ACDD 並向右位移 27 位元,想請老師幫忙解惑
如果不用查表,要存2^32 -1 個
TODO: 嘗試建立表格並引入規則來縮減
4 * 32 = 128 = 2 * cacheline (64B)
futex 可用於實作使用者空間之同步機制,因此相較於 pthread mutex 每次都需要進行系統呼叫調用來的更節省資源,那 futex 是否有什麼使用限制或是 pthread mutex 有什麼優點呢,為何不全面使用 futex就好了? 想請問老師 pthread mutex 和 futex 各自適合的使用情境
pthread 是一個標準,每個作業系統有不同的實作方式
futex 使用限制?
condition variable 的作用 : 通知 lock 的狀態
A, B, C <– shared resource
futex_wake, futex_wait
mutex 是 ownership,如果所有執行序都要看 lock
並行程式設計
TODO: 研究 RCU // 閱讀去年的 userspace RCU: https://hackmd.io/@sysprog/ry_6RHgS3 並紀錄問題和重現實驗