• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Focus on ACE

            訂閱 ace-china
            電子郵件:
            瀏覽存于 groups.google.com 上的所有帖子

            C++博客 首頁 新隨筆 聯系 聚合 管理
              64 Posts :: 3 Stories :: 22 Comments :: 0 Trackbacks
            2006年06月30日

            關于ACE_Task::last_thread()

            在ACE應用中,我們經常用ACE_Task類實現多線程處理。由于ACE_Svc_Handler從ACE_Task派生,當你寫的應用程序使用了Acceptor-Connector框架同時又直接使用ACE_Task,如線程池,這時你會使用到ACE_Task。
            因為許多ACE_Task對應是動態分配的,所以,必須在不再需要時把它們正確地釋放掉,知道何時可以釋放對象,這一點非常重要。C++NPv2第189頁描述了當多線程涉及到的task對象在它們退出時,使用ACE_Task::thr_count()方法確定正確釋放它們的方法。

            在C++NPv2文檔中描述的過程并不不安全,這里有一個用例可以說明這一點。原因如下:

            ACE在調用ACE_Task::close()掛鉤(hook)函數前檢查線程計數。

            線程鎖(task thread)使控制線程計數順序化,所以不能通過調用ACE_Task::close()達到控制線程數這一目的,這是因為關閉掛勾(close hook)方法會刪除task 對象。因此,多個線程檢查ACE_Task:: thr_count()的值都為0是可能存在的。

            舉例來說吧,我們假設這里有兩個線程,A和B,這給都要退出。線程A從svc()方法中退出控制,同時,ACE開始線程記錄保護(record-keeping)。ACE獲得線程鎖并把活動線程數從2減為1,接著,ACE釋放線程鎖并調用task的close()掛鉤方法。其間,線程B也從svc()方法中退出。在線程A檢查ACE_Task::thr_count()之前,ACE已執行線程B的清楚操作可能導致task的線程計數器從1變為0.如果那樣,線程A和B都會看到線程計數器為0,并都試圖清理task對象。這一點肯定不是好事.......

            發現并指出這一問題是一位長時間使用ACE的用戶,Howard Finer,經過一些迭代和試驗Howard找到一個解決這一問題的辦法,即額外的維護線程計數器,記住到底是哪一個線程真實的把線程計數器從1變為0,(上述例子中的線程B)。這就要求ACE_Task增加一個新的方法 :
            ACE_thread_t ACE_Task::last_thread (void) const
            所以,在你的代碼實現ACE_Task::close()時需要包含如下的檢查

            if (ACE_OS::thr_equal (ACE_Thread::self (),
            ?????????????????????? this->last_thread ()))
            ? {
            ??? // Do the cleanup here...
            ? }


            這個方法可能會出現在ACE 5.5.2中。

            posted on 2006-06-30 12:30 Stone Jiang 閱讀(1374) 評論(0)  編輯 收藏 引用 所屬分類: ACE
            久久久久亚洲精品无码蜜桃| 久久午夜免费视频| 亚洲国产另类久久久精品黑人| 久久精品国产精品亚洲人人 | 亚洲欧美久久久久9999| 国产成人无码精品久久久久免费| 99国内精品久久久久久久| 香蕉久久一区二区不卡无毒影院| 色综合色天天久久婷婷基地| AAA级久久久精品无码区| 久久久久国产亚洲AV麻豆| 久久人人爽人人精品视频| 久久人做人爽一区二区三区| 无码人妻久久一区二区三区蜜桃 | 久久综合狠狠综合久久| 日韩精品无码久久久久久| aaa级精品久久久国产片| 一本伊大人香蕉久久网手机| 久久久噜噜噜久久| 亚洲精品白浆高清久久久久久| 久久精品九九亚洲精品| 色综合久久中文综合网| 色8激情欧美成人久久综合电| 人人狠狠综合久久88成人| 中文字幕亚洲综合久久| 午夜精品久久久久成人| 国产精品一久久香蕉国产线看 | 久久久久久国产精品无码下载| 久久久久人妻一区二区三区 | 亚洲愉拍99热成人精品热久久| 国内精品久久久久久野外| 久久精品综合网| 国产精品久久久久久福利漫画| 亚洲欧美日韩久久精品| 国产精品久久久久影视不卡| 久久午夜夜伦鲁鲁片免费无码影视| 久久天天躁狠狠躁夜夜96流白浆| 老司机午夜网站国内精品久久久久久久久 | 99久久综合国产精品二区| 亚洲第一极品精品无码久久| 久久强奷乱码老熟女网站|