999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

淺談多線程安全

2015-05-30 06:34:22孫明鵬胡飛胡長春
儷人·教師版 2015年15期
關鍵詞:安全

孫明鵬 胡飛 胡長春

【摘要】多線程編程的基本概念存在于研究與開發實驗室中已有數十年之久。多線程的真正價值在語言設計的理論基礎和實戰細節上是顯而易見的,利用現代處理器和多處理器及其特點,多線程可具有更好的性能。多線程的應用最重要的問題是線程安全,未解決和解決不完全的線程安全問題,其導致的錯誤很難發現且很難被調試,并且線程所導致的錯誤所造成的損失是巨大且無可估量的。

【關鍵詞】多線程 ?編程 ?安全

一、什么是線程安全

當你的程序所在的進程之中有多個線程在同時運行,而這些線程可能會同時運行一段代碼或者會同時訪問一個對象,如果每次運行這段代碼或對對象訪問之后,所得到的結果和單線程情況下運行結果一樣,而且其他的變量的值也和預期保持一致,我們就認為是線程安全的。也就是說,當多個線程同時運行同一段代碼時不會造成資源的沖突,不會產生錯誤的結果就是線程安全的。如過有一段線程安全的代碼,它在多個線程中使用時不需要做同步處理;而線程不安全的代碼在多線程環境中使用必須要做同步處理,否則將會出現不可預期的后果。

二、線程不安全所造成的影響

在不進行數據保護操作時,當一段代碼或者對象可能被多個線程訪問,而且訪問順序不能確定,那么一旦這段代碼或者對象處于有條件的線程安全,線程兼容,線程對立這一分類,就可能出現多個線程先后更改數據,從而造成得到的數據不一致,或者數據出現污染,更嚴重的時候會出現臟數據,甚至程序崩潰。線程不安全是可怕的,一方面它對于程序編寫人員來說是一場災難,因為線程不安全導致的錯誤會被程序復雜的邏輯掩蓋,它所造成的錯誤與邏輯不嚴謹所造成的錯誤基本上相似,這就為除錯造成了困難,很多時候需要重新審視整個代碼,甚至很長時間無法發現問題所在。另一方面它對于程序的使用者造成的損失基本無法估計,在當下的數據時代,任何數據的不一致,數據的污染都會給一個公司和個人造成無法挽回的影響。

三、線程不安全的分類

線程的安全程度并沒有一個統一的分類,在喬希·布洛赫所給出線程分類描述,線程安全性分為五類,分別是:不可變、線程安全、有條件線程安全、線程兼容和線程對立。當然,若在明確的明白下線程安全特性的情況下,無論是否使用這種分類系統都沒有關系。喬希·布洛赫所提出的分類方法也有局限性,各個分類之間的界限并不是絕對的明朗,但是作為對線程安全的分類,確是簡單明了的。下面就各個類別進行詳細的說明:

1,不可變的

不可變的對象一定是線程安全的,因為其不可變的特性,它永遠也不需要進行額外的同步操作。只要一個不可變的對象在構建時候是正確的,那么永遠也不會看到它處于不一致的狀態。再代碼中,基本類型,基本數值類,字符常量都是不可變的。

2,線程安全的

所有線程安全的代碼或者對象都具有上面所提到的線程安全的屬性,也就是說,這段代碼或對象在多線程環境下,被多個線程訪問,不管這些線程的訪問順序是何種順序,所有訪問的線程都不需要進行額外的同步工作。這種線程安全的要求是嚴格的,滿足這種要求的和滿足不可變類型的所有代碼或者對象都是絕對的線程安全。

3,有條件的線程安全

有條件的線程安全,指的是對于這段代碼或者對象僅僅在一些操作訪問順序不同需要額外的同步操作。最顯著的有條件的線程安全是在遍歷一些返回迭代器對象的時候,如果在遍歷這些對象的同時存在另一個或多個線程進行了添加或移除內部元素的操作,必然會出現迭代器的失效。為了保證在某一線程在執行遍歷操作的時候該對象不會被其他線程訪問,應通過相應的手段,阻止其他線程做出導致該對象的迭代器失效的操作。進行迭代的線程應該確保它是獨占性的訪問該對象,從而保證了遍歷的完整性。

4,線程兼容的

線程兼容的代碼或者對象不是線程安全的,但是可以通過正常使用同步而在多線程環境下安全的使用。

5,線程對立的

線程對立是指一段代碼或者對象在運行中,一旦存在多進程對它進行操作,總是不能保證線程安全的,這種不能保證不管是否進行了同步的操作。線程對立是一種罕見且特殊的情況,例如當一段代碼或對象中的靜態數據被修改之后,被修改的數據可能會影響到其他代碼或者其他對象的行為時,這種時候就會出現線程對立。

四、防范線程不安全影響的措施

1.對于可能會運行在多線程環境下的代碼和對象的編寫人員,應盡量的保證該代碼在多線程環境每次運行結果和單線程情況下運行結果一致,而且其他的變量和值也能和預期結果保持一致。這種情況從根本上保證了線程安全。

2.對于可能會運行在多線程環境下的代碼和對象的編寫人員,在編寫代碼和對象的時候,應注意辨別是否能在多線程下正確運行,根據上文提出的線程安全的分類,對于有條件的線程安全的,線程兼容的,線程對立的應該給以相應的標記,或在文檔之中詳細的寫出說明。保證該代碼或者對象的潛在使用者能夠通過查看注釋或文檔,清楚明白的知道該代碼或對象在多線程環境下的運行狀態。

3.對于某段代碼或者某個對象的使用者,在使用這段代碼或對象之前,應該清楚的知道該代碼和對象是否是線程安全的,并且應該清楚的知道接下來使用這段代碼或對象的運行環境是否為多線程環境,根據不同的情況決定是否需要進行線程間的同步,或者用互斥鎖等方法使得線程能夠有序的訪問該代碼或對象。

4.對于某段代碼或者某個對象的使用者,如果確定為多線程環境,且確定接下來使用的代碼或對象有可能會被多個線程訪問,并且無法確定其是否是線程安全的時候,應盡量通過多種方式確定其線程安全與否,這些方式包括聯系作者或者通過自己的測試,以及查看源代碼。

5.對于軟件設計者來說,當程序不能按照設計運行,應當在檢測邏輯錯誤的同時,檢測是否因為線程不安全而導致的錯誤是必要的。依次檢查所使用別人代碼或別人提供的對象是否存在線程安全問題是最為合適的。

6.對于已經發現因為線程安全問題導致錯誤的軟件使用者,應及時停止使用該軟件,及時聯系軟件廠商,要求修改。

參考文獻:

1 Lubomir F.Bic,Alan C.Shaw.操作系統原理[M].北京:清華大學出版社,2005

2 安德魯斯.多線程,并行與分布式程序設計基礎(影印版)[M].北京:高等教育出版社,2002

3 Bruce Eckel.Thinking in JAVA[M].London:Prentice Hall,2006

猜你喜歡
安全
智能家居安全分析
熱電公司發電機勵磁系統改造
科技視界(2016年21期)2016-10-17 20:00:16
淺談計算機硬件實驗室管理
科技視界(2016年20期)2016-09-29 11:59:36
中國民航HUD的應用和發展淺析
科技視界(2016年20期)2016-09-29 10:54:27
主站蜘蛛池模板: 国产精品浪潮Av| 亚洲va视频| 久草青青在线视频| 亚洲日韩在线满18点击进入| 狼友视频一区二区三区| 香蕉伊思人视频| 热伊人99re久久精品最新地| 国产亚洲高清在线精品99| 一区二区三区成人| 精品国产自在在线在线观看| 亚洲天堂视频在线观看免费| 亚洲男女在线| 四虎永久免费地址在线网站| 国产精品午夜电影| 97久久免费视频| 久久亚洲高清国产| 亚洲国产系列| 青青草一区二区免费精品| 欧美天堂在线| 中文字幕在线一区二区在线| 中文字幕亚洲第一| 国产精品成人免费视频99| 黄色a一级视频| 久久99热66这里只有精品一| www.狠狠| 久久国产亚洲欧美日韩精品| 亚洲天堂高清| 欧美成人a∨视频免费观看| 国产在线视频二区| 爽爽影院十八禁在线观看| 岛国精品一区免费视频在线观看 | 欧美亚洲国产精品久久蜜芽| 国产又色又爽又黄| 99精品一区二区免费视频| 97在线视频免费观看| 亚洲免费毛片| 国产精品v欧美| 国产成+人+综合+亚洲欧美| 国产精品久久久久久久久久98| 在线中文字幕网| 亚洲成人动漫在线| 欧美97色| 久久久亚洲国产美女国产盗摄| 毛片久久网站小视频| 91香蕉国产亚洲一二三区| 欧美日韩国产在线观看一区二区三区| 国产成人精品一区二区秒拍1o| 午夜啪啪网| 国产精品极品美女自在线| 免费国产一级 片内射老| 国产丝袜无码精品| 欧美日韩精品综合在线一区| 国产欧美日韩视频怡春院| 亚洲欧美一区在线| 国产女人18毛片水真多1| 青青草原偷拍视频| 日本一区高清| 国产福利不卡视频| 91青青视频| 免费一级无码在线网站| 69精品在线观看| 中文字幕在线欧美| 亚洲成AV人手机在线观看网站| 国产第八页| 色国产视频| AV熟女乱| 国产成人综合亚洲欧洲色就色| 欧美成人亚洲综合精品欧美激情| 四虎在线观看视频高清无码| 日韩123欧美字幕| 99中文字幕亚洲一区二区| 九色视频线上播放| 久久青草精品一区二区三区| 色哟哟国产精品一区二区| 国产91九色在线播放| 超薄丝袜足j国产在线视频| 国产第一页第二页| 狠狠色丁香婷婷综合| 2020国产精品视频| 日韩在线视频网| 无码国产伊人| 亚洲天堂.com|