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

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運(yùn)轉(zhuǎn),開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

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

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


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

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


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


            ※ 詳細(xì)的是參考

            還有,在使用C++編程的場合要注意函數(shù)的方步方法。一般的說來下面的寫法是錯誤的。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)該用下面的方式來代替,

            Mutex m;

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

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


            ※ 詳細(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)行同步處理,來限制多個線程同時對它進(jìn)行操作

            被定義的,但是

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

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

            ?

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

            Feedback

            # re: UNIX上C++程序設(shè)計(jì)守則(6) [轉(zhuǎn)]  回復(fù)  更多評論   

            2009-02-08 22:29 by 放屁阿狗
            為了不談?wù)剆copelocker和recursion locker , readwrite lock ,這些才是關(guān)鍵的問題
            unix上對于stack有很大的限制
            對打開文件數(shù)量也是很有限制的,比如用root來修改這些限制,等等啦
            亚洲色大成网站WWW久久九九| 91精品婷婷国产综合久久| 久久久这里有精品| 久久久久99精品成人片试看| 精品少妇人妻av无码久久| 久久久久亚洲爆乳少妇无| 亚洲国产欧洲综合997久久| 99久久精品免费国产大片| 国内精品久久久久久久久电影网 | 久久无码一区二区三区少妇| 丁香色欲久久久久久综合网| 国产精品热久久无码av| 久久精品亚洲精品国产色婷| 7777精品伊人久久久大香线蕉| 99久久中文字幕| 久久久亚洲裙底偷窥综合| 久久99精品久久久久久不卡| 国内精品久久久久久99| 国产99久久久国产精品小说| 久久国产精品偷99| 国产精品一久久香蕉国产线看| 久久毛片一区二区| 一本大道久久东京热无码AV| 久久久精品人妻无码专区不卡 | 久久人与动人物a级毛片| 国产成人精品久久亚洲| 国产精品久久网| 国产精品久久久久久福利漫画| 中文字幕人妻色偷偷久久| 亚洲熟妇无码另类久久久| 国产精品久久久久久五月尺| 天堂无码久久综合东京热| 久久久久亚洲AV综合波多野结衣 | 97久久超碰国产精品旧版| 久久99国内精品自在现线| 无码人妻精品一区二区三区久久 | 波多野结衣久久精品| 久久久亚洲裙底偷窥综合| 乱亲女H秽乱长久久久| 国产产无码乱码精品久久鸭| 亚洲午夜久久久精品影院|