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