函數使用的安全性

如果是自己寫的函數裏用到了全局變量,則這些函數不是線程安全的,多線程同時調用時需要加鎖。

如果自己寫的函數只用到了局部變量,那就是ok的,怎麼用都沒問題,所以既是線程安全又是可重入的。

如果是庫函數需要分配系統資源,內存等,比如malloc,則是不可重入的如果一次malloc執行中未返回時跳到信號處理函數裏又調用malloc就不行了,但是是線程安全的,多線程調用不用加鎖。這些函數需要自己積累分辨。

如果是庫函數用到了全局變量則是線程不安全的,舉例如下:

rand()//但是我看uclibc-0.9.33.1裏的實現是加鎖了的,應該已經安全了

如果庫函數返回了靜態變量則線程不安全,舉例如下:

ctime()//但是我看uclibc-0.9.33.1裏的實現是加鎖了的,應該已經安全了

 

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