如果是自己寫的函數裏用到了全局變量,則這些函數不是線程安全的,多線程同時調用時需要加鎖。
如果自己寫的函數只用到了局部變量,那就是ok的,怎麼用都沒問題,所以既是線程安全又是可重入的。
如果是庫函數需要分配系統資源,內存等,比如malloc,則是不可重入的如果一次malloc執行中未返回時跳到信號處理函數裏又調用malloc就不行了,但是是線程安全的,多線程調用不用加鎖。這些函數需要自己積累分辨。
如果是庫函數用到了全局變量則是線程不安全的,舉例如下:
rand()//但是我看uclibc-0.9.33.1裏的實現是加鎖了的,應該已經安全了
如果庫函數返回了靜態變量則線程不安全,舉例如下:
ctime()//但是我看uclibc-0.9.33.1裏的實現是加鎖了的,應該已經安全了