春天里,百花香...
10 2007 檔案
摘要: 我們有時會遇到對同一個內存區域如數組或者鏈表進行多線程讀寫的情況,一般來說有以下幾種處理方式:
1.不加任何限制,多見于讀取寫入都很快的情況,但有時也會出現問題.
2.對讀寫函數都加以同步鎖,比如使用singleton模式,這下問題是沒了,但效率也下去了,比如說兩個讀取線程不是非要排隊進入不可.
3.讀寫鎖,安全和效率都得到了解決,特別合適讀線程多于寫線程的情況.也就是下面將要展現的模式.
讀寫鎖的本意是分別對讀寫狀態進行互斥區分,有互斥時才加鎖,否則放行.互斥的情況有:
1.讀寫互斥.
2.寫寫互斥.
不互斥的情況是:讀讀,這種情況不該加以限制.
我們只要讓鎖對象知道當前讀寫狀態就可以了,再根據情況進行鎖定和解鎖,然后再分情況進行鎖定.請看代碼
閱讀全文
摘要: 這篇文章是"調度員,工人及任務的OO分析過程"的續篇.
上次的情況是由調度員主動分配任務,但有些情況下需要工人自動取得任務而不是由調度員分配,這時需要對線程進行通知,使用的主要方法就是對象的wait(),notify(),notifyAll()三個函數,它們都必須從同步方法(synchronized method)中調用.
閱讀全文
摘要: 日常編碼中,我們常需要為各種業務進行建模,為工廠中的任務調度建模就很有意思的,它的主要流程是基本是這樣:
1.調度員將工件圖紙交付給工人,這是任務的下達.
2.工人工作,完成工件,這是任務的進行過程.
3.工件完成后,工人將圖紙和工件返還給調度員,或者到了確定的時間后由調度員去取.這是任務的完成.
4.重復上述三個步驟.
在這個流程中,還存在一些特征:
1.工人可以有多項任務,但他在一個時間只能做一個活,具體做那個由任務的優先級確定.
2.任務完成后要讓調度員知道,現實中是工人來找調度員或者調度員找工人來實現的.
從上述情況分析,我們需要任務,工人,調度員三個類來完成建模,另外為了方便任務的存儲和管理,還需要一個任務串類來輔助.
閱讀全文
sitinspring(http://www.aygfsteel.com)原創,轉載請注明出處.