線程安全

線程安全是程式設計中的術語 ， 指某個函數 、 函數庫在多執行緒環境中被調用時 ， 能夠正確地處理多個執行緒之間的公用變數 ， 使程序功能正確完成 。 假設有間銀行只有 1000 元 ， 而兩個人同時提領 1000 元時就可能會拿到總計 2000 元的金額 。 爲了避免這個問題 ， 該間銀行提款時應該使用互斥鎖 ， 即意味著針對同一個資源處理時 ， 前一個人提領交易完成後才處理下一筆交易 。 但這種手法會使得效能降低 。 一般來說 ， 線程安全的函數應該爲每個調用它的線程分配專門的空間 ， 來儲存需要單獨保存的狀態 （ 如果需要的話 ） ， 不依賴於 “ 線程慣性 ” ， 把多個線程共享的變量正確對待 （ 如 ， 通知編譯器該變數爲 “ 易失 （ volatile ） ” 型 ， 阻止其進行一些不恰當的優化 ） ， 而且 ， 線程安全的函數一般不應該修改全局對象 。 很多C庫代碼 （ 比如某些strtok的實現 ， 它將 “ 多次調用中需要保持不變的狀態 ” 儲存在靜態變量中 ， 導致不恰當的共享 ） 不是線程安全的 ， 在多執行緒環境中調用這些函數時 ， 要進行特別的預防措施 ， 或者尋找別的替代方案 。