回覆列表
  • 1 # 唯我曼聯

    一、可重入函式

    1)什麼是可重入性?

    可重入(reentrant)函式可以由多於一個任務併發使用,而不必擔心資料錯誤。相反, 不可重入(non-reentrant)函式不能由超過一個任務所共享,除非能確保函式的互斥(或者使用訊號量,或者在程式碼的關鍵部分禁用中斷)。可重入 函式可以在任意時刻被中斷,稍後再繼續執行,不會丟失資料。可重入函式要麼使用本地變數,要麼在使用全域性變數時保護自己的資料。

    2)可重入函式:

    不為連續的呼叫持有靜態資料。

    不返回指向靜態資料的指標;所有資料都由函式的呼叫者提供。

    使用本地資料,或者透過製作全域性資料的本地複製來保護全域性資料。

    如果必須訪問全域性變數,記住利用互斥訊號量來保護全域性變數。

    絕不呼叫任何不可重入函式。

    3)不可重入函式:

    函式中使用了靜態變數,無論是全域性靜態變數還是區域性靜態變數。

    函式返回靜態變數。

    函式中呼叫了不可重入函式。

    函式體內使用了靜態的資料結構;

    函式體內呼叫了malloc()或者free()函式;

    函式體內呼叫了其他標準I/O函式。

    函式是singleton中的成員函式而且使用了不使用執行緒獨立儲存的成員變數 。

    總的來說,如果一個函式在重入條件下使用了未受保護的共享的資源,那麼它是不可重入的

  • 中秋節和大豐收的關聯?
  • 金庸有幾部小說被拍成電視劇?