作業系統——執行緒與程式的區別與聯絡?什麼是執行緒安全?

readyao發表於2015-12-27

什麼是程式:

1、程式就是執行中的一段程式,也就是說,一旦程式被載入到了記憶體並準備執行時,它就是一個程式;
2、程式具有文字、資料、堆疊片段以及它自己的資源。資源可以是檔案,物件控制程式碼,裝置,訊號量,互斥量,管道等等;
3、作業系統管理程式以及它的資源,有大量資訊與程式有關,這些資訊儲存在一個稱作程式控制塊的資料結構中;作業系統就是用這個程式控制塊來管理程式以及它的資源;
4、當建立了一個程式的時候,就分配了一個程式空間。文字片段通過一個可執行映像初始化;

什麼是執行緒:

1、執行緒是一種輕量級程式。與程式相比,執行緒給作業系統帶來的建立、維護和管理負擔要輕,因為與執行緒相關的資訊非常少;
2、執行緒沒有地址空間,執行緒包含在程式的地址空間中;執行緒文字包含在它的程式的文字片段中;程式擁有的資源執行緒都可以使用;
3、一個程式裡面可以有多個執行緒,這些執行緒共享程式的資源;

兩者的區別:

1、相同點:

第一:都有上下文內容;
第二:都可以發生上下文切換(發生三種狀態的相互轉換,執行,阻塞,就緒);
第三:都可以實現併發執行;

2、不同點:

第一:執行緒是一種輕量級程式;
第二:執行緒沒有自己的執行緒空間,執行緒包含在程式的程式空間中;
第三:一個程式可以包含一個或多個執行緒;

執行緒安全:

多個執行緒共享程式的資源,當多個執行緒都執行一段程式碼,但是這一段程式碼會用到一個全域性變數並會修改這個全域性變數,所以這個時候會出現問題;
多個執行緒併發執行,當第一個執行緒讀取這個值的時候是3,當正在處理的時候另外一個執行緒將這個變數的值改為了9,這個時候就可能會出現問題。
這是多個執行緒併發執行出現的競爭問題,所以需要用到執行緒的同步方法;執行緒同步方法,一般有互斥量,互斥量與條件變數配合使用(生產者與消費者模型),訊號量,讀寫鎖;
參考:http://blog.csdn.net/linux_ever/article/details/50354377

上面的這些東西都是一些比較小的知識點,想徹底搞懂需要看很多介紹,下面是一些參考資料

具體參考資料:

1、現代作業系統(內容講的很細很詳細挺好,適合程式執行緒概念入門)
2、C++物件導向多執行緒程式設計(第2章,第3章)
3、C++多核高階程式設計(第5章,第6章)
第2,3這兩本書挺好的,尤其是C++多核高階程式設計(目前只看了前7章,感覺很好)。

最下面這本作業系統的書也挺好的,非常適合作業系統概念入門,我看的第一本作業系統的書,講的非常好。
重點大學計算機專業系列教材:作業系統    ----諶衛軍,王浩娟 著

相關文章