5.2螢幕對象
1.問題
許多應用程式包含其方法被多個客戶機線程并發調用的對象。這些方法通常修改其對象的狀态。是以,為了使這些并發應用程式能正确地執行,有必要對對象的通路進行同步和排程。對于這個問題,必須考慮四個強制條件:
1)為了事務分離并避免對象狀态不受控制地修改,面向對象程式設計人員習慣于隻通過對象的接口方法通路對象。擴充這種面向對象程式設計模型以避免對象的資料不受控制的并發修改相對比較直接。是以對象的接口方法應該定義它的同步邊界,在同一對象中某一時刻僅有一個方法能處于活動狀态。
2)如果客戶機必須顯式擷取和釋放低層同步機制,如信号燈、互斥或條件變量,那麼并發應用程式将更難進行程式設計。是以,對象應該負責確定它們需要同步的任何方法被透明地串行化,而不需要客戶機的顯式介入。
3)如果一個對象的方法在執行時必須阻塞,它們應該能夠自願放棄它們的控制線程,這樣其他客戶機線程調用的方法就可以通路這個對象。這種屬性有助于防止死鎖并能夠利用硬、軟體平台提供的并發機制。
4)一個方法自願放棄它的控制線程後,它必須讓對象處于穩定狀态,即必須保持與對象有關的不定式。類似地,隻有在對象處于穩定狀态時才可以在對象内恢複一個方法的執行。
2.解決方案
将對象方法的通路同步化,以便一次僅有一個方法可以執行。
細節:對于每個被多個客戶機線程并發通路的對象,把它定義為一個螢幕對象。客戶機隻能通過它的同步化方法通路螢幕對象定義的函數。為了防止對象内部狀态的競争條件,一次隻能有一個同步化方法能在螢幕對象内運作。為了将對象狀态的并發通路串行化,每個螢幕對象都包含一個螢幕鎖。同步化方法可以基于一個或多個螢幕對象關聯的螢幕條件确定它們挂起和恢複執行的環境。
3.結構
螢幕對象提供一個或多個方法。為了保護螢幕對象的内部狀态不被非受控地修改和防止競争條件,所有的客戶機必須僅通過這些方法通路螢幕對象。每個方法在調用它的客戶機線程中執行,因為螢幕對象沒有自己的控制線程。
同步化方法實作由螢幕對象提供的線程安全的功能。為了防止競争條件,一次隻能有一個同步化方法可以在螢幕對象中執行。不管并發調用對象的同步化方法的線程數量或者對象類中同步化方法的數量是多少,都可采用這種規則。

每個螢幕對象都包含有自己的螢幕鎖。同步化方法基于完全對象原則使用該鎖将方法調用串行化,每個同步化的方法在進入或退出對象時,必須請求和釋放對象的螢幕鎖。這個協定確定了不論何時同步化方法執行操作通路或修改對象的狀态,螢幕鎖都能被保持。
螢幕條件。運作在不同線程中的多個同步化方法可以通過與螢幕對象關聯的螢幕條件彼此等待和通知,進而協作排程它的執行順序。同步化方法将它們的螢幕鎖與螢幕條件結合使用,确定它們挂起或恢複處理時所處的環境。
4.實作
1)定義螢幕對象的接口方法。螢幕對象的接口向客戶機提供一系列方法。接口方法通常是同步的。就是說,在一個螢幕對象中一次隻有一個方法可以被線程執行。
2)定義螢幕對象的實作方法。螢幕對象通常包含内部實作方法,用這種同步化的接口方法來實作對象的功能。這種設計有助于将核心的螢幕對象功能特性與它的同步和排程邏輯分離開。
3)定義螢幕對象的内部狀态和同步機制。螢幕對象包含定義其内部狀态的資料成員。這種狀态必須受到保護,免受由非同步并發通路引起的競争條件的破壞。是以,螢幕對象包含一個螢幕鎖使它的同步化方法被串行執行,以及一個或多個螢幕條件,用于排程螢幕對象中同步化方法的執行。一般以下每種情況都對應一個獨立的螢幕條件:
·第一種情況,同步化方法必須将它們的處理挂起,等待某些狀态改變事件發生。
·第二種情況,同步化方法必須恢複其他線程,這些線程的同步化方法将其自身挂起,等待螢幕條件。
螢幕鎖可以使用互斥來實作。當持有互斥的線程執行臨界區的代碼時,互斥使協作的線程等待,直到特定事件發生或者複雜的條件表達式獲得一個特定的穩定狀态。條件表達式通常通路對象或線程間共享的狀态變量,它們可以用來實作保護挂起模式。
4)實作螢幕對象的所有方法和資料成員。
4.1)初始化資料成員。将對象特定的資料成員,以及螢幕鎖和任何螢幕條件初始化。
4.2)應用線程安全接口模式。按照線程安全接口模式實作接口方法和實作方法。
5.結論
優點:
1)簡化了并發控制。螢幕對象模式為在協作線程間共享對象提供了簡明的程式設計模型。
2)簡化了方法執行的排程。同步化方法使用它們的螢幕條件确定它們可能挂起或恢複它們的執行以及協作螢幕對象的環境。
不足:
1)當串行化多個線程對螢幕對象的通路時,由于争用增加,單螢幕鎖的使用會限制可擴充性。
2)螢幕對象的功能特性和它的同步機制的緊密耦合了導緻複雜的可擴充性語義。通過獨立的排程程式的參與,将主動對象的功能特性與它的同步政策分離是相對直接口。但是,螢幕對象的同步化和排程邏輯通常和其方法的功能特性緊密耦合。這種耦合常常使螢幕對象比主動對象更高效。不過,同時也很難在不修改螢幕對象的方法實作的情況下改變它們的同步政策和機制。
3)由于繼承異常的問題,也很難透明地繼承螢幕對象。當子類需要不同的同步機制時,該問題抑制了對同步化方法實作的重用。降低螢幕對象中同步和功能特性之間的耦合度的方法之一是使用面向特征的程式設計,使用政策化加鎖和線程安全接口模式。
4)嵌套的螢幕鎖定。可以通過在多螢幕條件間共享一個螢幕鎖而避免嵌套的螢幕阻塞。
http代理伺服器(3-4-7層代理)-網絡事件庫公共元件、核心kernel驅動 攝像頭驅動 tcpip網絡協定棧、netfilter、bridge 好像看過!!!!
但行好事 莫問前程
--身高體重180的胖子