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

            桃源谷

            心靈的旅行

            人生就是一場(chǎng)旅行,不在乎旅行的目的地,在乎的是沿途的風(fēng)景和看風(fēng)景的心情 !
            posts - 32, comments - 42, trackbacks - 0, articles - 0
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            準(zhǔn)則6:遵守多線程編程的常識(shí)(下)

            Posted on 2009-02-01 15:41 lymons 閱讀(1480) 評(píng)論(1)  編輯 收藏 引用 所屬分類: C++ 、C 、Unix/Linux 、文章翻譯
            From 2008精選

            UNIX上C++程序設(shè)計(jì)守則(6)Add star

            準(zhǔn)則6: 遵守多線程編程的常識(shí)


            1. 要準(zhǔn)確把握在POSIX標(biāo)準(zhǔn)的函數(shù)中,那些函數(shù)是非線程安全的,一定不要使用
            2. 要讓自己編寫的函數(shù)符合線程安全
              • 在訪問(wèn)共享數(shù)據(jù)/變量之前一定要先鎖定
              • 如果使用C++的話,一定要注意函數(shù)的同步方法

            說(shuō)明: (2) 要讓自己編寫的函數(shù)符合線程安全


            在寫多線程的應(yīng)用程序時(shí),在多個(gè)線程里共享的變量要先鎖定然后在更新它.。那么在多線程里共享的變量主要有全局變量和函數(shù)內(nèi)的靜態(tài)變量。而且,即使是short型和int型的共享變量也要先鎖定后更新才能保證其安全。


            ※ 詳細(xì)的是參考

            還有,在使用C++編程的場(chǎng)合要注意函數(shù)的方步方法。一般的說(shuō)來(lái)下面的寫法是錯(cuò)誤的。Mutex在函數(shù)內(nèi)被聲明成靜態(tài)變量是不允許的

            int incr_counter(void) {
            static Mutex m; // 這么寫不行
            m.Lock();

            static int counter = 0;
            int ret = ++counter;

            m.Unlock();
            return ret;
            }

            應(yīng)該用下面的方式來(lái)代替,

            Mutex m;

            int incr_counter(void) {
            m.Lock();
            // ...

            把Mutex聲明成全局變量的話比較好(稍微比上一個(gè)好)。


            ※ 詳細(xì)是參考

            UNIX上C++程序設(shè)計(jì)守則(6)-- 補(bǔ)記Add Star

            線程安全函數(shù)是像下面那樣

            1. 不要操作局部的靜態(tài)變量(函數(shù)內(nèi)的static型的變量)和非局部的靜態(tài)數(shù)據(jù)(全局變量)。并且,其它的非線程安全函數(shù)不要調(diào)用
            2. 要操作這樣的變量的話, 就要使用mutex進(jìn)行同步處理,來(lái)限制多個(gè)線程同時(shí)對(duì)它進(jìn)行操作

            被定義的,但是

            • 特別是前者, 和被叫做可重入的(reentrant)函數(shù)有區(qū)別
            • 反之, 后者特別是和叫做"Serializable"(不單單是MT-Safe)"Safe"的函數(shù)有區(qū)別

            也有以上的情況。在Solaris的man手冊(cè)里, 用后者的方式進(jìn)行區(qū)別. 從多線程程序里安全調(diào)用的話,就叫做"Safe", 而且, 在多線程中能夠并發(fā)(concurrency)地執(zhí)行這個(gè)函數(shù)的處理的話,好像就叫做"MT-Safe"。

             

            嗯, 因?yàn)楸容^詳細(xì)的, 如果不是在對(duì)于執(zhí)行速度要求比較苛刻的環(huán)境中編寫代碼的話, 單單地意識(shí)到「是否線程安全」就足夠了,不是嗎。

            Feedback

            # re: 準(zhǔn)則6:遵守多線程編程的常識(shí)(下)  回復(fù)  更多評(píng)論   

            2010-06-21 16:28 by martyrolatr
            博主能否詳細(xì)解釋下為何
            Mutex在函數(shù)內(nèi)被聲明成靜態(tài)變量是不允許的
            我使用過(guò)boost::mutex沒有發(fā)現(xiàn)問(wèn)題。
            我的個(gè)人簡(jiǎn)歷第一頁(yè) 我的個(gè)人簡(jiǎn)歷第二頁(yè)
            狠色狠色狠狠色综合久久| WWW婷婷AV久久久影片| 色综合久久天天综线观看| 中文字幕久久亚洲一区| 欧美丰满熟妇BBB久久久| 99久久精品国产免看国产一区| 国产成人香蕉久久久久| 国产精品久久新婚兰兰 | 久久精品国产亚洲一区二区| 国产精品九九久久免费视频 | 日韩欧美亚洲国产精品字幕久久久| 天天影视色香欲综合久久| 欧美一区二区三区久久综合| 久久精品中文字幕久久| 国产A三级久久精品| 久久久久亚洲精品天堂久久久久久| 亚洲国产欧洲综合997久久| 狠狠色丁香婷婷综合久久来来去| 精品多毛少妇人妻AV免费久久| 91精品国产91久久| 国产成人综合久久综合| 无码人妻久久一区二区三区蜜桃 | 久久WWW免费人成—看片| 99久久超碰中文字幕伊人| 三级三级久久三级久久| 久久精品二区| 四虎国产永久免费久久| 国产成人精品免费久久久久| 麻豆亚洲AV永久无码精品久久| 午夜精品久久久久久影视riav| 久久国产精品免费一区二区三区| 国产国产成人精品久久| 国产精品久久久久9999高清| 国内精品久久久久影院日本 | 久久成人精品视频| 97久久精品无码一区二区| 亚洲精品tv久久久久久久久 | 四虎亚洲国产成人久久精品| 久久综合亚洲色HEZYO国产| 久久精品国产亚洲Aⅴ蜜臀色欲 | 99久久国产热无码精品免费久久久久 |