一.
編譯,靜態鏈結到作業系統如何裝載程式,動態鏈結及執行庫和標準庫的實現
當成熟的作業系統出現以後,硬體逐漸被抽象成了一系列概念。在unix中,硬體裝置的訪問形式根訪問普通的檔案形式一樣:在windows系統中,圖形硬體被抽象成了gdi,聲音和多**裝置被抽象成了directx物件;磁碟被抽象成了普通檔案系統。
二.在優先順序排程的環境下,執行緒的優先順序改變一般有三種方式:
1.使用者指定優先順序;
2.根據進入等待狀態的頻繁程度提公升或降低優先順序;
3.長時間得不到執行而被提公升優先順序。
三.同步與鎖
為避免多個執行緒同時讀寫同乙個資料而產生不可預料的後果,需要將各個執行緒對同乙個資料的訪問同步。同步:在乙個執行緒訪問資料未結束的時候,其他執行緒不得對同乙個資料進行訪問。同步最常見的方法:鎖。
二元訊號量是最簡單的一種鎖。多元訊號量簡稱訊號量。
互斥量(mutex)和二元訊號量很類似,資源僅同時允許乙個執行緒訪問,但和訊號量不同的是,訊號量在整個系統可以被任意執行緒獲取並釋放,即:同乙個訊號量可以被系統中的乙個執行緒獲取後由另乙個執行緒釋放。而互斥量則要求哪個執行緒獲取了互斥量,哪個執行緒就要負責釋放這個鎖。
臨界區(critical section)是比互斥量更加嚴格的同步手段。臨界區的作用範圍僅限於本程序,其他的程序無法獲取該鎖。除此之外,臨界區和互斥量具有相同的性質。
讀寫鎖。對於同乙個鎖,讀寫鎖有兩種獲取方式,共享的(shared)或獨佔的(exclusive)。
讀寫鎖狀態 以共享方式獲取 以獨佔方式獲取
自由 成功 成功
共享 成功 等待
獨佔 等待 等待
條件變數(condition variable)。使用條件變數可以讓許多執行緒一起等待某個事件的發生,當事件發生時(條件變數被喚醒),所有的執行緒可以一起恢復執行。
四.可重入(reentrant)與執行緒安全
volatile關鍵字試圖阻止過度優化,volatile基本可以做到兩件事情:
1)阻止編譯器為了提高速度將乙個變數快取到暫存器內而不寫回。
2)阻止編譯器調整操作volatile變數的指令順序。
《程式設計師的自我修養》筆記
以下是我讀此書時作的一些筆記,當然書中還有很多值得參考的想法,就不一一枚舉了。一萬小時說法 這個說法很普遍了,它再次提醒了我如何去做乙個領域的專家。如果平均每天八小時在這個領域上,那麼一年300天 300 8 2400,保持這種學習激情在上面,五年內就可以成為專家了,我算了算自己在這個領域投入的時間...
程式設計師的自我修養
一忌 輕易言敗,沒有自信 沒有永不放棄精神的程式設計師,只是乙個有程式設計師名號的假程式設計師。乙個真正的程式設計師,知道在程式設計的過程中,可能會遇到不計其數的困難和問題,可能有極多的挫折和失敗,而成功只有一次。就為解決乙個問題,我們可能連續十幾甚至幾十小時的坐在計算機前不停的工作。乙個問題解決了...
程式設計師的自我修養
一忌 輕易言敗,沒有自信 沒有永不放棄精神的程式設計師,只是乙個有程式設計師名號的假程式設計師。乙個真正的程式設計師,知道在程式設計的過程中,可能會遇到不計其數的困難和問題,可能有極多的挫折和失敗,而成功只有一次。就為解決乙個問題,我們可能連續十幾甚至幾十小時的坐在計算機前不停的工作。乙個問題解決了...