glibc,執行緒安全與可重入

2021-05-24 02:07:40 字數 1306 閱讀 9866

1. glibc是什麼,以及與gcc的關係?

glibc是gnu發布的libc庫,也即c執行庫。glibc是linux 系統中最底層的api(應用程式開發介面),幾乎其它任何的執行庫都會倚賴於glibc。glibc除了封裝linux作業系統所提供的系統服務外,它本身也提供了許多其它一些必要功能服務的實現,主要的如下:

(1)string,字串處理

(2)signal,訊號處理

(3)dlfcn,管理共享庫的動態載入

(4)direct,檔案目錄操作

(5)elf,共享庫的動態載入器,也即interpreter

(6)iconv,不同字符集的編碼轉換

(7)inet,socket介面的實現

(8)intl,國際化,也即gettext的實現

(9)io

(10)linuxthreads

(11)locale,本地化

(12)login,虛擬終端裝置的管理,及系統的安全訪問

(13)malloc,動態記憶體的分配與管理

(14)nis

(15)stdlib,其它基本功能

gcc 是編譯器,基本上 linux 下所有的程式(包括核心)都是 gcc 編譯的,libc 當然也是。

gcc 和 libc 是互相依賴的兩個軟體,它們合作的方式類似 linux 系統的 "自舉"。先在乙個可以執行的帶有老 libc 和 gcc 的系統上,用老 gcc 編譯出乙個新版本的 gcc + 老 libc,再用這個新 gcc 編譯出乙個新 gcc + 新 libc,再用這套東東編譯整個新系統。

2. 如何檢視 glibc 的版本資訊?

/lib/libc.so.6 或者 rpm -qa | grep glibc

3. glibc 是不是執行緒安全的?

glibc 應該是符合 posix.1標準的。posix.1規定大部分的posix.1函式以及 ansi c 函式是執行緒安全的。除過少數幾個函式,比如 asctime、inet_ntoa 等。

下表所示:

4. 非同步訊號安全

linux實際程式設計經驗,對於多執行緒程式,呼叫執行緒安全就可以了,能重入最好,但是不強求,多執行緒呼叫malloc是可以的。但是,在安裝訊號處理程式的時候,看看你自己呼叫的是不是非同步訊號安全函式,怎麼看?很簡單,所有非同步訊號安全的函式在他的man中會十分明確的指出來,沒有指出的一律就是不安全的。

5. 可重入

malloc與free是不可重入的,標準i/o函式也是不可重入的。

可重入與執行緒安全

之前一直糾結可重入與執行緒安全的區別,今天詳細查了一下。其實根據兩個概念的名字就可以得出結論,可重入就是重複多次結果都是一樣的,而執行緒安全則不一樣,只要不同執行緒執行的時候不會出現因不同執行緒執行順序不同而結果不同就可以。大多數情況下,要將不可重入函式改為可重入的,需要修改函式介面,使得所有的資料...

執行緒安全與可重入

1 什麼是執行緒安全 當乙個函式被多個執行緒反覆呼叫的時候,他會一直產生正確的結果,那麼這個函式就是執行緒安全的。執行緒安全函式解決了多個執行緒呼叫函式時訪問臨界資源的衝突問題。2 可重入 在多執行緒或有異常控制流的情況下,當某個函式執行到中途時,控制流有可能被打斷去執行另乙個函式,而這 另乙個函式...

可重入與執行緒安全

概念 可重入性class counter void increment void decrement intvalue const private int n counter類是可重入,但不是執行緒安全的。因為 和 操作符不是原子性的,它們通常要經歷以下三個步驟 暫存器讀取記憶體中變數的值 增加或減...