亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
有關線程安全
[打印本頁]
作者:
51黑tt
時間:
2016-3-5 23:48
標題:
有關線程安全
有關線程安全
1、可重入的概念
若一個程序或子程序可以安全的被并行執行,則稱其為可重入(reentrant或re-entrant)的;即,當該子程序正在運行時,可以再次進入并執行它。若一個函數是可重入的,則該函數:
不能含有靜態(全局)非常量數據。
不能返回靜態(全局)非常量數據的地址。
只能處理由調用者提供的數據。
不能依賴于單實例模式資源的鎖。
不能調用不可重入的函數。
與線程安全的關系
可重入與線程安全兩個概念都關系到函數處理資源的方式。但是,他們有一定的區別。可重入概念會影響函數的外部接口,而線程安全只關心函數的實現。
大多數情況下,要將不可重入函數改為可重入的,需要修改函數接口,使得所有的數據都通過函數的調用者提供。
要將非線程安全的函數改為線程安全的,則只需要修改函數的實現部分。一般通過加入同步機制以保護共享的資源,使之不會被幾個進程同時訪問。
因此,相對線程安全來說,可重入性是更基本的特性,它可以保證線程安全:即,所有的可重入函數都是線程安全的,但并非所有的線程安全函數都是可重入的。
2、
調用一個函數(假設該函數是正確的)操作某對象常常會使該對象暫時陷入不可用的狀態(通常稱為不穩定狀態),等到操作完全結束,該對象才會重新回到完全可用的狀態。如果其他線程企圖訪問一個處于不可用狀態的對象,該對象將不能正確響應從而產生無法預料的結果,如何避免這種情況發生是線程安全性的核心問題。
一般準則
如果一個函數在其文檔中沒有特別注明具備線程安全性,則應該認為它不具備。許多庫大量使用了內部的靜態數據,除非它是為多線程應用所設計,否則要牢記其內部數據可能沒有利用互斥量進行適當的保護。類似,如果類的成員函數在其文檔中沒有特別注明對于多線程應用是安全的話,則認為它不安全。兩個線程去操作相同的對象會引起問題,這是顯而易見的,然而,即使兩個線程去操作不同的物體依然會引起問題。出于多種原因,許多類使用了內部靜態數據或者在多個看上去明顯不同的對象間共享實現細則,
以下給出幾個一般準則:
操作系統提供的API具備線程安全性
POSIX線程標準要求C標準庫中的大多數函數具備線程安全性,少數例外會在C標準中注明。
對于Windows提供的C標準庫,如果所使用的版本沒有問題,而且進行了正確的初始化,他們都是安全的。
C++標準庫的線程安全性不是很明確,它在很大程度上依賴于使用的編譯器。標準模板庫線程安全性的SGI準則作為實際中的標準取得很大進展,但并不是統一的標準。
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1