要編寫線程安全的類,只需用同步原語保護內部狀態即可。
如果一個對象能被多個線程同時看到,,那麼對象的銷燬時機會變得模糊不清,可能出現競態條件(race condition):
- 在即將析構函數一個對象時,從何而知此刻是否有別的線程正在執行該對象的成員函數?
- 如何保證執行成員在函數期間,對象不會在另一個線程被析構?
- 在調用某個對象的成員函數之前,如何得知這個對象還活着?它的析構函數會不會碰巧執行到一一半?
- 多個線程同時訪問,表現出正確的行爲。
- 無論操作系統如何調度這些函數,無論這些線程的執行順序如何交織。
- 調用端代碼無需額外的同步或其它協調操作。