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

            桃源谷

            心靈的旅行

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

            準則6:遵守多線程編程的常識(下)

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

            UNIX上C++程序設計守則(6)Add star

            準則6: 遵守多線程編程的常識


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

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


            在寫多線程的應用程序時,在多個線程里共享的變量要先鎖定然后在更新它.。那么在多線程里共享的變量主要有全局變量和函數內的靜態變量。而且,即使是short型和int型的共享變量也要先鎖定后更新才能保證其安全。


            ※ 詳細的是參考

            還有,在使用C++編程的場合要注意函數的方步方法。一般的說來下面的寫法是錯誤的。Mutex在函數內被聲明成靜態變量是不允許的

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

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

            m.Unlock();
            return ret;
            }

            應該用下面的方式來代替,

            Mutex m;

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

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


            ※ 詳細是參考

            UNIX上C++程序設計守則(6)-- 補記Add Star

            線程安全函數是像下面那樣

            1. 不要操作局部的靜態變量(函數內的static型的變量)和非局部的靜態數據(全局變量)。并且,其它的非線程安全函數不要調用
            2. 要操作這樣的變量的話, 就要使用mutex進行同步處理,來限制多個線程同時對它進行操作

            被定義的,但是

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

            也有以上的情況。在Solaris的man手冊里, 用后者的方式進行區別. 從多線程程序里安全調用的話,就叫做"Safe", 而且, 在多線程中能夠并發(concurrency)地執行這個函數的處理的話,好像就叫做"MT-Safe"。

             

            嗯, 因為比較詳細的, 如果不是在對于執行速度要求比較苛刻的環境中編寫代碼的話, 單單地意識到「是否線程安全」就足夠了,不是嗎。

            Feedback

            # re: 準則6:遵守多線程編程的常識(下)  回復  更多評論   

            2010-06-21 16:28 by martyrolatr
            博主能否詳細解釋下為何
            Mutex在函數內被聲明成靜態變量是不允許的
            我使用過boost::mutex沒有發現問題。
            我的個人簡歷第一頁 我的個人簡歷第二頁
            999久久久无码国产精品| 久久天天躁狠狠躁夜夜不卡| 99国内精品久久久久久久| 99久久精品国产一区二区蜜芽| 免费观看成人久久网免费观看| 狠狠色丁香久久婷婷综合蜜芽五月| 7777久久久国产精品消防器材| 久久青青草原国产精品免费| 色播久久人人爽人人爽人人片aV | 99精品久久久久久久婷婷| 狠狠色伊人久久精品综合网| 日产精品久久久一区二区| 久久伊人影视| 久久91综合国产91久久精品| 色88久久久久高潮综合影院| 久久亚洲精品中文字幕三区| 亚洲人成伊人成综合网久久久| 欧美亚洲另类久久综合| 色婷婷综合久久久中文字幕| 久久影院午夜理论片无码| 精品午夜久久福利大片| 亚洲精品乱码久久久久久蜜桃图片| 亚洲国产精品成人AV无码久久综合影院| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 久久久久亚洲?V成人无码| 国内精品久久久久久久影视麻豆| 一本色道久久综合狠狠躁| 久久综合鬼色88久久精品综合自在自线噜噜 | 精品国产91久久久久久久| 色狠狠久久AV五月综合| 麻豆av久久av盛宴av| 麻豆久久久9性大片| 思思久久99热只有频精品66| 欧美激情精品久久久久久久| 久久久久久久久久免免费精品| 狠狠人妻久久久久久综合| 色成年激情久久综合| 亚洲一区中文字幕久久| 久久精品国产亚洲一区二区三区 | 狠狠色丁香久久婷婷综合| 亚洲精品无码久久千人斩|