只在Linux下查看了malloc的使用情況:
GCC版本4.6.1
libc-dev 3.0.0-14.23
//============================================================
libc中有非線程安全/線程安全兩個版本malloc函數
下面的鏈接對此有描述,幾年前的版本可能是這樣的:
通過 -pthreads 選項可以明確指定在鏈接時是鏈接非線程安全的版本還是線程安全的版本。
http://stackoverflow.com/questions/987444/about-thread-safety-in-malloc-and-free
//============================================================
我使用的版本中已經沒有-pthreads這個選項了,但更智能些:
會智能選擇使用非線程安全/線程安全的malloc函數
//====================
測試結果:
只要使用了線程相關的函數,在編譯后的文件中使用的malloc函數就是線程安全的版本。
(鏈接器不會考慮你是否真的啟動了線程,或是否真的使用了那個線程)
//====================
即:在文件中引用了頭文件#include<pthread.h>,編譯時使用-lpthread選項,文件中使用了pthread_t定義變量,
但沒有使用pthread_attr_init或pthread_createh函數,編譯后的malloc函數就是非線程安全的。
//====================
但如果使用了pthread_attr_init或pthread_createh函數,編譯后的malloc函數就是線程安全的。
即使你只是使用了一次pthread_createh(NULL,NULL,NULL,NULL);
//============================================================
我以前從沒考慮過malloc是否是線程安全的這回事,反正就直接用了。
使用glibc時可以在官網上下載手冊,如果函數是非線程安全的,在函數下面會有一行說明(好像只有很少幾個是非線程安全的)。
雖然malloc下面沒有說明,但我還是觀察了一下,算是解開自己的疑惑吧。
//============================================================
End:)