我有一個使用線程的C++ wxWidgets程序。因此我需要確保線程安全地被訪問。在wxThread documentation中解釋瞭如何這樣做。他們使用friend
類和wxCriticalSection
來保護他們的線程。我是這樣做的,就像在這個例子中一樣,它運作良好,但是當我和一個同事談論這件事時,他告訴我朋友班是邪惡的,應該避免所有的事情,以避免意外的行爲。我應該使用wxMutex
。wxThread文檔示例有用或錯誤的編碼習慣?
現在我明白了他的觀點,因爲我的main
作爲好友類給了線程類完全訪問它。我明白,這可能會導致問題,例如,如果我有類似的命名變量或無意中訪問其他東西,我不應該使用主外。但我想知道這種方法是否有優勢。我的意思是,必須有一些東西,否則我不明白爲什麼這種方式應該(在wxWidgets文檔中描述的唯一方式)?
有人請賜教我關於兩種方法的優缺點嗎?或者,還有第三種方法可以在不使用friend
的情況下只從主體訪問wxCriticalSection
或將其公開化?感謝您的幫助。
編輯:當我意識到,在我的代碼的關鍵部分是從很久以前的神器,那時並不需要了,這個問題是不是我的編程是至關重要的。不過,我認爲這是一個有趣的話題,對於未來的情況會很有用。
所以如果我把它弄對了,他們可以在例子中使用wxMutex而不是wxCriticalSection,但是用'friend'類來解決這個問題是不好的做法嗎? – Lehue
'朋友'是不好的做法,是的。但是這裏沒有必要使用'wxMutex','wxCS'完全沒問題。而且,這兩點又相互無關。 –