自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

靈活運(yùn)用Unix 線程知識(shí)

系統(tǒng) 其他OS
我們知道,Unix 線程安全是為了避免數(shù)據(jù)競(jìng)爭(zhēng)或者數(shù)據(jù)設(shè)置的正確性依賴于多個(gè)Unix 線程修改數(shù)據(jù)的順序。但在很多時(shí)候,Unix 線程的安全問題得不到保障。

今天我們來(lái)學(xué)習(xí)用Unix 線程的知識(shí)來(lái)解決問題。在 UNIX 編程中,我們會(huì)經(jīng)常使用系統(tǒng)調(diào)用來(lái)完成期望的功能;而與此同時(shí),我們也需要付出大段的代碼來(lái)檢測(cè)、輸出錯(cuò)誤和其他意外情況。

Unix 線程安全是為了避免數(shù)據(jù)競(jìng)爭(zhēng)或者數(shù)據(jù)設(shè)置的正確性依賴于多個(gè)Unix 線程修改數(shù)據(jù)的順序。假設(shè)你的代碼所在的進(jìn)程中有多個(gè)Unix 線程在同時(shí)運(yùn)行,而這些線程可能會(huì)同時(shí)運(yùn)行這段代碼。如果每次運(yùn)行結(jié)果和單線程運(yùn)行的結(jié)果是一樣的,而且其他的變量的值也和預(yù)期的是一樣的,就是Unix 線程安全的。

Unix 線程的使用中以下是系統(tǒng)調(diào)用失敗的可能原因:

系統(tǒng)可能出現(xiàn)資源短缺或者程序使用的資源可能超過系統(tǒng)為單個(gè)程序規(guī)定的上限。常見的情況有:程序可能嘗試分配大量?jī)?nèi)存,或者同時(shí)打開很多文件等。
程序執(zhí)行操作時(shí),可能會(huì)由于權(quán)限不足而被系統(tǒng)阻止。例如,程序可能會(huì)試圖寫一個(gè)只讀的文件,或者企圖訪問其他進(jìn)程的內(nèi)存空間。 傳入系統(tǒng)調(diào)用的參數(shù)可能無(wú)效,原因可能是用戶提供無(wú)效輸入或者程序本身的 bug。例如,程序可能會(huì)傳入一個(gè)無(wú)效的內(nèi)存地址或者無(wú)效的文件描述符。

系統(tǒng)調(diào)用還有可能因?yàn)槌绦蛑獾脑虺鲥e(cuò)。系統(tǒng)調(diào)用訪問硬件的時(shí)候經(jīng)常會(huì)有這種情況發(fā)生。設(shè)備可能會(huì)出現(xiàn)異常錯(cuò)誤或者不支持特定的操作,或者可能會(huì)出現(xiàn)磁盤沒有插入驅(qū)動(dòng)器中的情況出現(xiàn)。 系統(tǒng)調(diào)用有的時(shí)候會(huì)被外部事件 ( 如信號(hào)等 ) 中斷。這可能不代表真正的調(diào)用失敗,但是如果有必要,程序應(yīng)當(dāng)重新嘗試執(zhí)行系統(tǒng)調(diào)用。

對(duì)于函數(shù)來(lái)說(shuō),在多Unix 線程或有異常控制流的情況下 , 當(dāng)某個(gè)函數(shù)運(yùn)行到中途時(shí) , 控制流 ( 也就是當(dāng)前指令序列 ) 就有可能被打斷而去執(zhí)行另一個(gè)函數(shù)。而這個(gè)函數(shù)很有可能是它本身。如果在這種情況下不會(huì)出現(xiàn)問題 , 比如說(shuō)數(shù)據(jù)或狀態(tài)不會(huì)被破壞,行為確定。那么這個(gè)函數(shù)就被稱做 " 可重入 " 的。

在多Unix 線程編程中,有兩種方法使庫(kù)函數(shù)可以保證其安全。一個(gè)是簡(jiǎn)單的將合適的代碼使用互斥鎖包起來(lái),這樣可以保證同時(shí)只有一個(gè)線程執(zhí)行這一段例程。雖然這種方法大部分情況下都能奏效,但是它的性能卻非常糟糕。而且對(duì)于諸如 strtok 函數(shù),該方法就完全不能工作了,因此很多 UNIX 系統(tǒng)都存在 _r 的接口函數(shù)。

另一個(gè)更好的辦法是確保庫(kù)函數(shù)可以同時(shí)在多個(gè)Unix 線程情況下安全的執(zhí)行。這里指的不僅僅是帶有后綴 _r 的可重入對(duì)等函數(shù);畢竟可重入和線程安全(Thread-Safe)是兩個(gè)不同的概念:可重入函數(shù)一定是Unix 線程安全的;線程安全的函數(shù)可能是重入的,也可能是不重入的;Unix 線程不安全的函數(shù)一定是不可重入的。所以諸如 malloc,free 等函數(shù)也在此列,屬于Unix 線程安全的庫(kù)函數(shù)。

當(dāng)然,如果你在單線程應(yīng)用程序中使用Unix 線程安全函數(shù)會(huì)在一定程度上降低性能,所以盡量避免在單線程應(yīng)用程序中使用它們。

【編輯推薦】

  1. 初步講解Unix 線程知識(shí)
  2. 知識(shí)講堂Unix內(nèi)核教學(xué)
  3. 淺析Unix內(nèi)核索引結(jié)點(diǎn)表
  4. Unix內(nèi)核與Linux內(nèi)核大比拼
  5. 知識(shí)講解Unix 消息隊(duì)列
責(zé)任編輯:小霞
相關(guān)推薦

2009-12-07 17:20:29

PHP stdClas

2011-07-25 16:25:47

2019-10-21 15:30:54

JS技巧前端

2009-02-20 10:59:21

Vista幫助系統(tǒng)使用技巧

2010-04-27 17:06:16

AIX vmstat

2009-10-23 15:30:53

無(wú)線接入技術(shù)

2009-07-01 17:58:20

JSP

2013-04-10 10:39:57

2011-07-08 13:56:00

域控制器服務(wù)器

2013-04-07 10:15:34

2024-01-26 16:28:28

C++動(dòng)態(tài)內(nèi)存開發(fā)

2010-04-29 16:15:26

Unix文件

2021-07-12 07:08:52

Spring Boot集成框架

2009-12-01 11:33:03

PHP判斷字符串的包含

2012-01-10 10:05:47

文件目錄訪問控制UGO

2012-02-04 14:56:52

JP1數(shù)據(jù)中心

2010-05-27 13:32:36

IIS服務(wù)安全認(rèn)證

2016-10-08 12:46:08

Linux監(jiān)控限制

2011-08-23 18:30:59

MySQLTIMESTAMP

2011-08-17 09:47:55

windows7搜索
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)