printf()經重入和效能上的問題
阿新 • • 發佈:2018-12-16
printf()的重入和效能上的問題
重入
重入:一般可以理解為一個函式在同時多次呼叫,例如作業系統在程序排程過程中,或者微控制器、處理器等的中斷的時候會發生重入的現象
舉個例子比如雙核計算機多執行緒同時列印文字就可能把文字交替的打印出來了,不是預期要的結果一般浮點運算都是由專門的硬體來完成,舉個例子假設有個硬體暫存器名字叫做FLOAT,用來計算和存放浮點數的中間運算結果
假設有這麼個函式 void fun() { //…這個函式對FLOAT暫存器進行操作 }
假如第一次執行,有個對浮點數操作運算的結果臨時存在FLOAT暫存器中,而就在這時被中斷了,而中斷函式或者另一個程序也呼叫fun函式,這時第二次呼叫的fun函式在執行的過程中就會破壞第一次FLOAT暫存器中的結果,這樣當返回到第一次fun函式的時候,結果就不正確了。可以把fun函式理解為printf()函式。
printf()函式與硬體相關,硬體埠相當於全域性變數,函式內部的全域性變數,導致該函式不可重入。
效能上的問題:
上述的問題也屬於效能問題。對於併發或同時執行的多程序或任務,若要正確使用printf()函式,必須互斥使用,在一個程序或任務執行printf ()時,其他使用printf()的程序或任務只能等待,不能及時顯示。