先前已經向各位介紹如何利用鎖保證多執行緒程式的同步,像是 Spinlock 、 Mutex lock 與 Semaphore 等。這樣的作法雖然可以有效避免 Condition race ,卻因為執行緒被阻塞而增加程式的延遲。
為了有效避免上述狀況,電腦科學家又提出了非阻塞演算法,為了實現該演算法,計算機通常需要支援 Atomic operations ,常見的操作像是 CAS (Compare And Swap)。
在 Lock-free 系統中,有些特定的計算仍有可能被 Block 一段時間,不過,其他執行緒不會因為該計算被阻塞,而是繼續做其他無須該資原的任務進而增加整體的吞吐量。
Lock-free 這邊的無鎖指的是沒有執行緒會被鎖住,而不是程式中沒有鎖。
考前必讀 1. I/O 處理 2. STL Container 3. STL Algorithm sort lower_bound upper_bound 4. String 處理
Mar 21, 2023主要參考文獻 Microsoft Docs AIdrifter CS 浮生筆錄 Google C++ Style Guide 繁體中文版 chenlen.com cplusplus.com 山姆大叔談 C++:從歷史談起,再給個定義—Modern C++ 解惑系列文 比較安全的 C++ 虛擬函式寫法:C++11 override 與 final 使用 VSCode 開發 C++
Mar 20, 2023查閱 Linux manual page 時會發現: 在 stdio.h 中有密密麻麻的函式/變數定義。有趣的是,筆者發現許多 C 語言的入門教材都沒有將標準輸入輸出交代仔細。讓大多數的人讀完文章還是對 stdio.h 內函式的設計感到一頭霧水,因此,筆者希望透過撰寫文章為大家解惑,也順便複習一下生疏的 C 語言技能。 先備知識 在學習 stdio library 之前,需要先了解 Unix 作業系統的檔案觀念,在掌握檔案觀念後,可以幫助我們更快的理解 stdio 的設計巧思。 File descriptor stdio.h 中的函式幾乎都跟 File 的操作脫不了關係。 在 Unix 或是 Unix-like 中,作業系統抽象了一層資料結構用來存取 File, input / output 資源,該資料結構稱為 File descriptor 。並且, File descriptor 是屬於 POSIX API 的一部份,在符合 POSIX 的作業系統上,每一個 Process (除了守護程序)都應該具備至少三個 File descriptor ,分別是:
Sep 21, 2021or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up