




已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Monitor Object設(shè)計(jì)模式入手 探索Java同步機(jī)制 二,Monitor Object 設(shè)計(jì)模式 C+ 描述 我們將從以下幾個(gè)方面來(lái)討論 Monitor Object 模式。 問(wèn)題描述 我們?cè)陂_(kāi)發(fā)并發(fā)的應(yīng)用時(shí),經(jīng)常需要設(shè)計(jì)這樣的對(duì)象,該對(duì)象的方法會(huì)在多線程的環(huán)境下被調(diào)用,而這些方法的執(zhí)行都會(huì)改變?cè)搶?duì)象本身的狀態(tài)。為了防止競(jìng)爭(zhēng)條件 (race condition) 的出現(xiàn),對(duì)于這類對(duì)象的設(shè)計(jì),需要考慮解決以下問(wèn)題: 在任一時(shí)間內(nèi),只有唯一的公共的成員方法,被唯一的線程所執(zhí)行。 對(duì)于對(duì)象的調(diào)用者來(lái)說(shuō),如果總是需要在調(diào)用方法之前進(jìn)行拿鎖,而在調(diào)用方法之后進(jìn)行放鎖,這將會(huì)使并發(fā)應(yīng)用編程變得更加困難。合理的設(shè)計(jì)是,該對(duì)象本身確保任何針對(duì)它的方法請(qǐng)求的同步被透明的進(jìn)行,而不需要調(diào)用者的介入。,如果一個(gè)對(duì)象的方法執(zhí)行過(guò)程中,由于某些條件不能滿足而阻塞,應(yīng)該允許其它的客戶端線程的方法調(diào)用可以訪問(wèn)該對(duì)象。 我們使用 Monitor Object 設(shè)計(jì)模式來(lái)解決這類問(wèn)題:將被客戶線程并發(fā)訪問(wèn)的對(duì)象定義為一個(gè) monitor 對(duì)象。客戶線程僅僅通過(guò) monitor 對(duì)象的同步方法才能使用 monitor 對(duì)象定義的服務(wù)。為了防止陷入競(jìng)爭(zhēng)條件,在任一時(shí)刻只能有一個(gè)同步方法被執(zhí)行。每一個(gè) monitor 對(duì)象包含一個(gè) monitor 鎖,被同步方法用于串行訪問(wèn)對(duì)象的行為和狀態(tài)。此外,同步方法可以根據(jù)一個(gè)或多個(gè)與 monitor 對(duì)象相關(guān)的 monitor conditions 來(lái)決定在何種情況下掛起或恢復(fù)他們的執(zhí)行。,結(jié)構(gòu) 在 Monitor Object 模式中,主要有四種類型的參與者: 監(jiān)視者對(duì)象 (Monitor Object): 負(fù)責(zé)定義公共的接口方法,這些公共的接口方法會(huì)在多線程的環(huán)境下被調(diào)用執(zhí)行。 同步方法:這些方法是監(jiān)視者對(duì)象所定義。為了防止競(jìng)爭(zhēng)條件,無(wú)論是否同時(shí)有多個(gè)線程并發(fā)調(diào)用同步方法,還是監(jiān)視者對(duì)象含有多個(gè)同步方法,在任一時(shí)間內(nèi)只有監(jiān)視者對(duì)象的一個(gè)同步方法能夠被執(zhí)行。 監(jiān)視鎖 (Monitor Lock): 每一個(gè)監(jiān)視者對(duì)象都會(huì)擁有一把監(jiān)視鎖。 監(jiān)視條件 (Monitor Condition): 同步方法使用監(jiān)視鎖和監(jiān)視條件來(lái)決定方法是否需要阻塞或重新執(zhí)行。,執(zhí)行序列圖 在監(jiān)視者對(duì)象模式中,在參與者之間將發(fā)生如下的協(xié)作過(guò)程: 1、同步方法的調(diào)用和串行化。當(dāng)客戶線程調(diào)用監(jiān)視者對(duì)象的同步方法時(shí),必須首先獲取它的監(jiān)視鎖。只要該監(jiān)視者對(duì)象有其他同步方法正在被執(zhí)行,獲取操作便不會(huì)成功。在這種情況下,客戶線程將被阻塞直到它獲取監(jiān)視鎖。當(dāng)客戶線程成功獲取監(jiān)視鎖后,進(jìn)入臨界區(qū),執(zhí)行方法實(shí)現(xiàn)的服務(wù)。一旦同步方法完成執(zhí)行,監(jiān)視鎖會(huì)被自動(dòng)釋放,目的是使其他客戶線程有機(jī)會(huì)調(diào)用執(zhí)行該監(jiān)視者對(duì)象的同步方法。 2、同步方法線程掛起。如果調(diào)用同步方法的客戶線程必須被阻塞或是有其他原因不能立刻進(jìn)行,它能夠在一個(gè)監(jiān)視條件上等待,這將導(dǎo)致該客戶線程暫時(shí)釋放監(jiān)視鎖,并被掛起在監(jiān)視條件上。,3、監(jiān)視條件通知。一個(gè)客戶線程能夠通知一個(gè)監(jiān)視條件,目的是為了讓一個(gè)前期使自己掛起在一個(gè)監(jiān)視條件上的同步方法線程恢復(fù)運(yùn)行。 4、同步方法線程恢復(fù)。一旦一個(gè)早先被掛起在監(jiān)視條件上的同步方法線程獲取通知,它將繼續(xù)在最初的等待監(jiān)視條件的點(diǎn)上執(zhí)行。在被通知線程被允許恢復(fù)執(zhí)行同步方法之前,監(jiān)視鎖將自動(dòng)被獲取。圖 1 描述了監(jiān)視者對(duì)象的動(dòng)態(tài)特性。,示例 在本節(jié)中,我們將使用監(jiān)視者對(duì)象設(shè)計(jì)模式來(lái)解決一個(gè)實(shí)際的問(wèn)題。 這是一個(gè)典型的生產(chǎn)者 / 消費(fèi)者模式問(wèn)題。假定我們有一個(gè)固定長(zhǎng)度的消息隊(duì)列,該隊(duì)列會(huì)被多個(gè)生產(chǎn)者 / 消費(fèi)者線程所操作,生產(chǎn)者線程負(fù)責(zé)將消息放入該隊(duì)列,而消費(fèi)者線程負(fù)責(zé)從該對(duì)列中取出消息。 清單 6. Message_Queue.h class Message_Queue public: enum MAX_MESSAGES = 100/* . */ ; / The constructor defines the maximum number / of messages in the queue. This determines when the queue is full. Message_Queue(size_t max_messages = MAX_MESSAGES); virtual Message_Queue();,/ Put the at the tail of the queue. / If the queue is full, block until the queue is not full. /* synchronized */ void put (const Message ,private: / Put the at the tail of the queue, and / get the at its head, respectively. / Note that, the internal methods are not synchronized. void put_i (const Message ,/ The maximum number s that can be / in a queue before its considered full. size_t max_messages_; / Monitor lock that protects the queues / internal state from race conditions during concurrent access. mutable Thread_Mutex monitor_lock_; / Condition variable used in conjunction with to make / synchronized method threads wait until the queue is no longer empty. Thread_Condition not_empty_; / Condition variable used in conjunction with to make / synchronized method threads wait until the queue is no longer full. Thread_Condition not_full_; ;,清單 7. Message_Queue.cpp #include “Message_Queue.h“ Message_Queue:Message_Queue (size_t max_messages) :not_full_(monitor_lock_), not_empty_(monitor_lock_), max_messages_(max_messages), message_count_(0) bool Message_Queue:empty () const Guard guard (monitor_lock_); return empty_i (); bool Message_Queue:full () const,Guard guard (monitor_lock_); return full_i (); void Message_Queue:put (const Message ,/ Enqueue the at the tail. put_i (msg); / Notify any thread waiting in that the queue has at least one . not_empty_.notify (); / Destructor of releases . Message Message_Queue:get () / Use the Scoped Locking idiom to acquire/release the upon / entry/exit to the synchronized method. Guard guard (monitor_lock_); / Wait while the queue is empty. while (empty_i () / Release and suspend the / calling thread waiting for a new to / be put into the queue. The is / reacquired automatically when returns. not_empty_.wait (); ,/ Dequeue the first in the queue and update the . Message m = get_i (); / Notify any thread waiting in that the / queue has room for at least one . not_full_.notify (); return
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 民間個(gè)人借款合同(集合15篇)
- 攀枝花輔警考試題庫(kù)2025(有答案)
- 能源行業(yè)智能監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)方案
- 慢性心力衰竭基層診療指南(2024年)
- 2025年內(nèi)蒙古中煤集團(tuán)鄂爾多斯山不拉煤礦校園招聘考試筆試試題(含答案)
- 海洋文化與經(jīng)濟(jì)融合發(fā)展路徑
- 老師的音樂(lè)課件
- 2025年氨基酸運(yùn)動(dòng)飲料食品市場(chǎng)分析報(bào)告
- 菜園土地流轉(zhuǎn)與農(nóng)業(yè)產(chǎn)業(yè)化合作合同
- 2025年目標(biāo)管理實(shí)施與評(píng)估考試試卷及答案
- 【邵陽(yáng)】2024年湖南邵陽(yáng)新邵縣事業(yè)單位招聘工作人員44人筆試附帶答案詳解
- 外賣餐飲平臺(tái)管理制度
- 2025年青浦區(qū)區(qū)管企業(yè)統(tǒng)一招聘55人筆試參考題庫(kù)附帶答案詳解
- 2025年河南省鐵路建設(shè)投資集團(tuán)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025年中考語(yǔ)文作文終極押題(附范文5篇)
- 一網(wǎng)一平臺(tái)電大《西方經(jīng)濟(jì)學(xué)(經(jīng)濟(jì)學(xué))》形考任務(wù)1-6終結(jié)性考試題庫(kù)答案
- 股權(quán)質(zhì)押合同違約處理協(xié)議
- 初中德育教育家長(zhǎng)會(huì)
- 道路危險(xiǎn)貨物運(yùn)輸企業(yè)安全風(fēng)險(xiǎn)辨識(shí)清單
- 2025春季學(xué)期國(guó)開(kāi)電大專科《管理英語(yǔ)1》一平臺(tái)在線形考(綜合測(cè)試)試題及答案
評(píng)論
0/150
提交評(píng)論