欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1460|回復: 0
打印 上一主題 下一主題
收起左側

有關線程安全

[復制鏈接]
跳轉到指定樓層
樓主
ID:107189 發表于 2016-3-5 23:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
有關線程安全 1、可重入的概念
若一個程序或子程序可以安全的被并行執行,則稱其為可重入(reentrant或re-entrant)的;即,當該子程序正在運行時,可以再次進入并執行它。若一個函數是可重入的,則該函數:
不能含有靜態(全局)非常量數據。
不能返回靜態(全局)非常量數據的地址。
只能處理由調用者提供的數據。
不能依賴于單實例模式資源的鎖。
不能調用不可重入的函數。
與線程安全的關系
可重入與線程安全兩個概念都關系到函數處理資源的方式。但是,他們有一定的區別。可重入概念會影響函數的外部接口,而線程安全只關心函數的實現。
大多數情況下,要將不可重入函數改為可重入的,需要修改函數接口,使得所有的數據都通過函數的調用者提供。
要將非線程安全的函數改為線程安全的,則只需要修改函數的實現部分。一般通過加入同步機制以保護共享的資源,使之不會被幾個進程同時訪問。
因此,相對線程安全來說,可重入性是更基本的特性,它可以保證線程安全:即,所有的可重入函數都是線程安全的,但并非所有的線程安全函數都是可重入的。
2、
調用一個函數(假設該函數是正確的)操作某對象常常會使該對象暫時陷入不可用的狀態(通常稱為不穩定狀態),等到操作完全結束,該對象才會重新回到完全可用的狀態。如果其他線程企圖訪問一個處于不可用狀態的對象,該對象將不能正確響應從而產生無法預料的結果,如何避免這種情況發生是線程安全性的核心問題。

一般準則
  如果一個函數在其文檔中沒有特別注明具備線程安全性,則應該認為它不具備。許多庫大量使用了內部的靜態數據,除非它是為多線程應用所設計,否則要牢記其內部數據可能沒有利用互斥量進行適當的保護。類似,如果類的成員函數在其文檔中沒有特別注明對于多線程應用是安全的話,則認為它不安全。兩個線程去操作相同的對象會引起問題,這是顯而易見的,然而,即使兩個線程去操作不同的物體依然會引起問題。出于多種原因,許多類使用了內部靜態數據或者在多個看上去明顯不同的對象間共享實現細則,
  以下給出幾個一般準則:
  操作系統提供的API具備線程安全性
  POSIX線程標準要求C標準庫中的大多數函數具備線程安全性,少數例外會在C標準中注明。
  對于Windows提供的C標準庫,如果所使用的版本沒有問題,而且進行了正確的初始化,他們都是安全的。
  C++標準庫的線程安全性不是很明確,它在很大程度上依賴于使用的編譯器。標準模板庫線程安全性的SGI準則作為實際中的標準取得很大進展,但并不是統一的標準。



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表