printf 經重入和效能上的問題

2021-08-29 16:29:04 字數 550 閱讀 7647

重入:一般可以理解為乙個函式在同時多次呼叫,例如作業系統在程序排程過程中,或者微控制器、處理器等的中斷的時候會發生重入的現象

舉個例子比如雙核計算機多執行緒同時列印文字就可能把文字交替的列印出來了,不是預期要的結果

一般浮點運算都是由專門的硬體來完成,舉個例子假設有個硬體暫存器名字叫做float,用來計算和存放浮點數的中間運算結果

假設有這麼個函式

void fun()

假如第一次執行,有個對浮點數操作運算的結果臨時存在float暫存器中,而就在這時被中斷了,而中斷函式或者另乙個程序也呼叫fun函式,這時第二次呼叫的fun函式在執行的過程中就會破壞第一次float暫存器中的結果,這樣當返回到第一次fun函式的時候,結果就不正確了。可以把fun函式理解為printf()函式。

printf()函式與硬體相關,硬體埠相當於全域性變數,函式內部的全域性變數,導致該函式不可重入。

上述的問題也屬於效能問題。對於併發或同時執行的多程序或任務,若要正確使用printf()函式,必須互斥使用,在乙個程序或任務執行printf ()時,其他使用printf()的程序或任務只能等待,不能及時顯示。

7 printf函式的不可重入性

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

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

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

可重入和不可重入

重入一般可以理解為乙個函式在同時多次呼叫,例如作業系統在程序排程過程中,或者微控制器 處理器等的中斷的時候會發生重入的現象。一般浮點運算都是由專門的硬體來完成,舉個例子假設有個硬體暫存器名字叫做float,用來計算和存放浮點數的中間運算結果 假設有這麼個函式 void fun 假如第一次執行,有個對...