對於多執行緒程式,我已經習慣於使用
原子物件模式(來降低死鎖的風險。
但最近乙個專案中,使用了原子物件封裝了所有多執行緒訪問的資源,系統竟然死鎖了,而且鎖住的地方恰好是原子物件內部。經過思考,發現此前我們對原子模式的理解有誤,以為只要每個物件的公開介面是執行緒安全的,就可以算是原子物件了,其實還有乙個條件:在公開介面中,不能鎖定其它公共資源。它可以使用其它原子物件,但使用前不能加鎖。不能鎖定公共資源,只能鎖定內部資源:否則就不是原子物件了。
因此:1、一般來說,應當想辦法禁止原子物件之間的相互呼叫。
2、如果無法避免1,應當保證原子物件內部資源在鎖住的時候不呼叫其它原子物件的介面。
這一點往往不容易做到,有的時候甚至我們不得不為此付出一定的代價。
3、如果無法避免2,那麼應當保證原子物件之間的呼叫圖是一棵單向的樹,而不能是一張有迴路的網。
只要避開了迴圈呼叫,這個系統仍然還是執行緒安全、無死鎖的。
4、原子物件乙個很容易被遺忘加鎖的地方是析構函式。
原子物件正在刪除的時候,其公開函式被其它執行緒呼叫了,那麼系統很容易崩潰。必須仔細設計避免這一點。
一文讀懂示波器的觸發模式
在沒有進行任何特殊設定的情況下,示波器會按固定頻率,抓取訊號來生成影象。由於取樣頻率 訊號變化頻率往往不一致,所以每次抓取 生成的影象會有差異。它們依次顯示在螢幕上時,肉眼看起來,便成了來回滾動的波形。為了獲得穩定的波形顯示,需要將示波器的掃瞄頻率與訊號的變化頻率同步起來。示波器可以通過設定乙個 觸...
對在Qtopia中新增國際化支援一文補充
經過對qt的分析,發現實際上qt的原理是將各種文字編碼先轉化為utf8編碼,然翻譯為qm檔案來顯示本地字元 這裡不使用findstr msg2qm工具,而採用另外的qt工具lupdate lrelease linguist來完成本地化操作 以qt2 tutorial t1 作為中文翻譯例子 進行了少...
「莆田的 叛徒 」一文
開篇便說,莆田商人中的一部分讓人感到神秘好奇。在很多人開來,他們封閉排外 不守規則 精於算計,種種行事方式令他們擁有著周邊城市羨慕的財富,但卻難以獲取與財富值相匹配的尊重。45歲的莆田鞋商陳英洪決計打破這一局面,在這個被稱為 假鞋之都 的城市,他執意研發生產真品戶外鞋,希望將其打造為 光耀門楣的事業...