多線程函數理解

多線程調用同一個函數的理解

  • 多線程調用一個函數和一個線程調用一個函數是一樣的,關鍵要看你的函數是否使用了一些全局的東西。
  • 函數的調用有自己的棧,每個函數的棧都是獨立的.
  • 唯一要考慮的是,在調用這個函數中,如果函數裏面有全局變量或者靜態變量,則需要考慮併發的問題,都是局部變量則沒有任何影響(局部變量都被分配在棧上)。

線程安全函數和可重入函數

  • 線程安全的(Thread-Safe):如果一個函數在同一時刻可以被多個線程安全地調用,就稱該函數是線程安全的。線程安全函數解決多個線程調用函數時訪問共享資 源的衝突問題。

  • 可重入(Reentrant):函數可以由多於一個線程併發使用,而不必擔心數據錯誤。可重入函數可以在任意時刻被中斷,稍後再繼續運行,不會丟失數據。可重入 性解決函數運行結果的確定性和可重複性。可重入函數編寫規範爲:
    1) 不在函數內部使用靜態或全局數據
    2) 不返回靜態或全局數據,所有數據都由函數的調用者提供。
    3) 使用本地數據,或者通過製作全局數據的本地拷貝來保護全局數據。
    4) 如果必須訪問全局變量,利用互斥機制來保護全局變量。
    5) 不調用不可重入函數。

    線程安全函數和可重入函數 兩者之間的關係:
    1) 一個函數對於多個線程是可重入的,則這個函數是線程安全的。
    2) 一個函數是線程安全的,但並不一定是可重入的。
    3) 可重入性要強於線程安全性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章