MFC對象不要跨線程使用,因為MFC不是線程安全的。比如CWnd對象不要跨線程使用,可以用窗口句柄(HWND)代替。CSocket/CAsyncSocket對象不要跨線程使用,用SOCKET句柄代替.那么到底什么是線程安全呢?什么時候需要考慮?如果程序涉及到多線程的話,就應該考慮線程安全問題。比如說設計的接口,將來需要在多線程環境中使用,或者需要跨線程使用某個對象時,這個就必須考慮了。關于線程安全也沒什么權威定義。在這里我只說說我的理解:所提供的接口對于線程來說是原子操作或者多個線程之間的切換不會導致該接口的執行結果存在二義性,也就是說我們不用考慮同步的問題。
一般而言“線程安全”由多線程對共享資源的訪問引起。如果調用某個接口時需要我們自己采取同步措施來保護該接口訪問的共享資源,則這樣的接口不是線程安全的.MFC和STL都不是線程安全的. 怎樣才能設計出線程安全的類或者接口呢?如果接口中訪問的數據都屬于私有數據,那么這樣的接口是線程安全的.或者幾個接口對共享數據都是只讀操作,那么這樣的接口也是線程安全的.如果多個接口之間有共享數據,而且有讀有寫的話,如果設計者自己采取了同步措施,調用者不需要考慮數據同步問題,則這樣的接口是線程安全的,否則不是線程安全的