• <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>

            martin

            thinking

            常用鏈接

            統(tǒng)計(jì)

            software

            最新評(píng)論

            線程間數(shù)據(jù)傳遞

             

            在以前的multi-process程序中,process之間通過(guò)共享內(nèi)存、操作系統(tǒng)提供的消息對(duì)列,命名管道等不同方式進(jìn)行數(shù)據(jù)傳遞。為了減少內(nèi)存,以及進(jìn)程切換時(shí)引發(fā)的上下文切換的開(kāi)銷(xiāo),現(xiàn)在的系統(tǒng)一般采用multi-thread 工作方式。

            process都有各自獨(dú)立的地址空間,并且是專(zhuān)有的,因此一個(gè)process不能通過(guò)指針訪問(wèn)另一個(gè)process中的地址空間。而屬于同一process的各thread,它們共享同一process的地址空間,因此一個(gè)thread可以通過(guò)指針訪問(wèn)另一個(gè)thread中的地址。這樣我們可以在應(yīng)用中自己定義消息隊(duì)列,并對(duì)消息隊(duì)列的訪問(wèn)進(jìn)行管理,簡(jiǎn)化程序并提高性能。

             

            multi-thread應(yīng)用中,我們可以使用消息對(duì)列來(lái)在不同thread之間進(jìn)行消息傳遞,并降低各thread之間的藕合。

            它們之間的關(guān)系如下:

            生產(chǎn)者:向消息隊(duì)列中放數(shù)據(jù)的線程。

            消費(fèi)者:從消息隊(duì)列中取出數(shù)據(jù)的線程。

             
             生產(chǎn)者 ----> 消息隊(duì)列 ----->消費(fèi)者

             

            如果應(yīng)用規(guī)定消息隊(duì)列的最大長(zhǎng)度。在對(duì)隊(duì)列進(jìn)行控制時(shí),應(yīng)該當(dāng)消息隊(duì)列滿時(shí),可能要讓生產(chǎn)者進(jìn)行等待,直到消息隊(duì)列中有新的位置可以放入新的消息。當(dāng)消息隊(duì)列為空時(shí),應(yīng)該讓消費(fèi)者進(jìn)行等待,知道有新的消息被加到消息隊(duì)列中。

             

            在該模型中有兩點(diǎn)需要注意:

            1.不同生產(chǎn)者,消費(fèi)者同時(shí)并發(fā)操作消息隊(duì)列時(shí),對(duì)各操作的串行化。這個(gè)問(wèn)題可以通過(guò)對(duì)隊(duì)列的操作進(jìn)行加鎖來(lái)實(shí)現(xiàn)。它的實(shí)現(xiàn)可以參考另一篇隨筆《C++同步鎖管理的一種方法》。

            2.在消息隊(duì)列為空或滿時(shí),應(yīng)用程序的處理。

            這可以在C++中采用Monitor.Monitor中對(duì)某種條件進(jìn)行監(jiān)控。

            Monitor 對(duì)象可以采取的動(dòng)作:

            (1)、等待操作 wait(long timeout = INFINITE), 缺省情況下無(wú)限等待下去。

            (2)、發(fā)信號(hào)操作 signal(long count = 1), 缺省情況下激活一個(gè)正在消息隊(duì)列上進(jìn)行等代的線程。

             

            對(duì)于Monitor的實(shí)現(xiàn),可以很簡(jiǎn)單地用下列兩種方式實(shí)現(xiàn):

            1、采用ACE中的ACE_Event, ACE_Thread_Semphore實(shí)現(xiàn)。

            2、采用 ICECond實(shí)現(xiàn), Linux上,Cond實(shí)際上是通過(guò)pthread_cond_t來(lái)實(shí)現(xiàn)的。

             

            posted on 2009-03-11 12:30 martin_yahoo 閱讀(3741) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            激情伊人五月天久久综合| 色婷婷噜噜久久国产精品12p| 久久婷婷五月综合97色| 久久精品国产精品青草app| 99久久人人爽亚洲精品美女| 亚洲天堂久久久| 久久成人国产精品二三区| 欧美激情精品久久久久久久九九九| 伊人久久大香线蕉AV色婷婷色| 成人久久综合网| 久久人与动人物a级毛片| 久久线看观看精品香蕉国产| 国内精品久久久久影院亚洲| 久久91精品久久91综合| 亚洲国产欧美国产综合久久| 久久www免费人成精品香蕉| 精品久久久久中文字幕日本| 一日本道伊人久久综合影| 品成人欧美大片久久国产欧美 | 69SEX久久精品国产麻豆| 亚洲人AV永久一区二区三区久久| 亚洲乱亚洲乱淫久久| 久久婷婷成人综合色综合| 久久久国产视频| 亚洲精品国精品久久99热| 欧美精品福利视频一区二区三区久久久精品| 久久棈精品久久久久久噜噜| 无码国内精品久久人妻| 2020久久精品亚洲热综合一本 | 精品免费久久久久久久| 欧美va久久久噜噜噜久久| 久久天天躁夜夜躁狠狠| 久久亚洲精品成人无码网站| 少妇熟女久久综合网色欲| 久久久久精品国产亚洲AV无码| 久久久久久久综合日本| 欧美麻豆久久久久久中文| 久久亚洲精品国产亚洲老地址| 亚洲国产综合久久天堂| 国产精品美女久久福利网站| 中文字幕久久精品无码|