《POSIX多線程程序設計中文版》讀書筆記
在計算機專用術語中,線程是指機器中連續的、順序的屬性集合。
一個UNIX進程可以理解爲一個線程加上地址空間、文件描述符和其他數據。
從某種程度上講,線程是構造異步程序的一種方法。
“進程是資源分配的最小單位,線程是CPU調度的最小單位”
先從舀水的程序員說起:三個程序員乘一艘小船出海,開始時風和日麗,過了一會兒之後暴風雨降臨,當暴風雨逐漸減緩後,小船沒了桅杆和帆,留下了一個小縫。小船上有食物、水、槳和一個水桶。於是他們愉快的工作:一個人划船、監視滲水的情況,其他兩個人則可能去睡覺、尋找可以停靠的島嶼、查看水位情況。
空閒的程序員看到水位上升、開始用水桶舀水。當兩個程序員都醒來的時候,可能同時發現了水位上升,都要去拿水桶。但只能有一個拿到水桶,而另外一個人不得不等待。
如果兩個人都睡着了,而划船的人認爲該舀水的時候,通常會推醒一個人而讓另一個人繼續睡覺。但是如果划船的人心情不好,則會大喊大叫把兩個人都吵醒,讓其中一個人幹活的時候另一個則可以繼續睡覺。
當划船的夥計累了的時候,可以喚醒其中一個接替他的工作,然後馬上睡覺,直到他再次被喚醒。這樣他們就可以繼續旅程了。
OK,這就是線程的模型。一個程序員就是一個能獨立活動的實體。在這裏,程序員代表線程。
舀水的桶和划船的槳就是一次只能由一人擁有的令牌,它們可以被理解爲共享數據,或是同步對象。在Pthreads中同步對象稱爲互斥量(mutex)。
輕推和喊叫是與同步對象相關的通信機制,個體等待這些事件的發生。Pthreads中提供了條件變量,可以通過信號和廣播來指示共享數據的狀態。
術語:
異步:表明事情相互獨立發生,除非有強加的依賴性。
併發:本書中是指實際上可能串行發生的事情好像同事發生一樣。
之後會以程序例子的形式展示線程的應用,如如何讓線程退出,如何終止一個正在運行的線程,終止線程後的清理工作等。
歡迎大家關注公衆號~