7 printf函式的不可重入性

2021-05-27 16:09:56 字數 635 閱讀 6197

printf()經常有重入解釋

不可重入函式不可以在它還沒有返回就再次被呼叫。例如printf,malloc,free等都是不可重入函式。因為中斷可能在任何時候發生,例如在printf執行過程中,因此不能在中斷處理函式裡呼叫printf,否則printf將會被重入

函式不可重入大多數是因為在函式中引用了全域性變數。例如,printf會引用全域性變數stdout,malloc,free會引用全域性的記憶體分配表。

不可重入函式指的是該函式在被呼叫還沒有結束以前,再次被呼叫可能會產生錯誤。可重入函式不存在這樣的問題。

不可重入函式在實現時候通常使用了全域性的資源,在多執行緒的環境下,如果沒有很好的處理資料保護和互斥訪問,就會發生錯誤。

常見的不可重入函式有:

printf --------引用全域性變數stdout

malloc --------全域性記憶體分配表

free    --------全域性記憶體分配表

這主要在多工環境中使用,乙個可重入的函式簡單來說,就是:可以被中斷的函式。就是說,你可以在這個函式執行的任何時候中斷他的執行,在os的排程下去執行另外一段**而不會出現什麼錯誤。而不可重入的函式由於使用了一些系統資源,比如全域性變數區,中斷向量表等等,所以他如果被中斷的話,可能出現問題,所以這類函式是不能執行在多工環境下的。

不可重入函式和可重入函式 執行緒安全性

不可重入函式和可重入函式 ldd3 裡面有說 1.printk 不支援浮點數 float point 2.printk 可以設定降低呼叫 printk 的頻率,如果呼叫同一行 printk 太頻繁,你可以抑制掉一些重複的 printk 訊息。3.printk 是核心專用。中斷函式最好不能有阻塞操作 ...

可重入函式與不可重入函式的區別

自 可重入函式可以做這樣的基本定義 重入意味著這個函式可以重複進入,可以被並行呼叫,可以被中斷,它只使用自身棧上的資料變數,它不依賴於任務環境,在多任務排程過程中,它是安全的,不必擔心資料出錯。不可重入函式基本上與可重入函式有相反的定義了 不可重入,意味著不可被並行排程,否則會產生不可預料的結果,這...

Linux中的可重入函式和不可重入函式

標籤 linux 多執行緒處理器 行業資料 全域性變數 2013 04 18 10 25 3484人閱讀 收藏舉報 分類 unix環境高階程式設計 55 作者同類文章 x可重入函式 可重入函式 即可以被中斷的函式 可以被乙個以上的任務呼叫,而不擔心資料破壞。可重入函式在任何時候都可以被中斷,而一段時...