乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      C++最佳實(shí)踐 | 5. 可移植性及多線程 - 簡書

       覓書時代 2023-07-13 發(fā)布于河北

      DeepNoMind關(guān)注IP屬地: 上海

      2022.05.22 10:13:17字?jǐn)?shù) 1,020閱讀 335

      本系列是開源書C++ Best Practises的中文版,全書從工具、代碼風(fēng)格、安全性、可維護(hù)性、可移植性、多線程、性能、正確性等角度全面介紹了現(xiàn)代C++項目的最佳實(shí)踐。本文是該系列的第五篇。

      C++最佳實(shí)踐:

      1. 工具

      2. 代碼風(fēng)格

      3. 安全性

      4. 可維護(hù)性

      5. 可移植性及多線程(本文)

      6. 性能

      7. 正確性和腳本

      可移植性

      明確使用的類型

      大多數(shù)產(chǎn)生告警的可移植性問題都是因為我們沒有注意類型。標(biāo)準(zhǔn)庫和數(shù)組使用size_t作為索引,標(biāo)準(zhǔn)容器的大小使用size_t類型。如果對size_t的處理不正確,可能會潛伏有微妙的64位問題,這種問題只有在開始32位整型索引溢出之后才會出現(xiàn)。另一種類似問題是char類型和unsigned char類型的使用。

      參考: http://www./en/a/0010/

      使用標(biāo)準(zhǔn)庫

      std::filesystem

      C++17新增了新的filesystem庫,在所有支持的編譯器上提供了可移植的文件系統(tǒng)訪問能力。

      std::thread

      C++11的線程功能能夠基于pthreadWinThreads使用。

      其他

      本系列中的其他大多數(shù)問題最終都可以歸結(jié)到可移植性上,尤其要注意避免靜態(tài)(static)類型(參考下文多線程部分)。

      多線程

      避免全局?jǐn)?shù)據(jù)

      全局?jǐn)?shù)據(jù)會導(dǎo)致函數(shù)之間意想不到的副作用,并可能使代碼難以甚至無法并行化。即使現(xiàn)在的代碼不是為了并行化而寫,也沒有理由在將來永遠(yuǎn)不做并行化。

      靜態(tài)(static)數(shù)據(jù)

      除了作為全局?jǐn)?shù)據(jù)之外,靜態(tài)數(shù)據(jù)并不總是像期望的那樣被構(gòu)造和析構(gòu),在跨平臺環(huán)境中尤其如此。例如,有個g++的bug就是關(guān)于從動態(tài)模塊加載的共享靜態(tài)數(shù)據(jù)的銷毀順序的。

      共享指針

      std::shared_ptr和全局變量一樣(http:///a/18803611/29975),允許多段代碼與相同的數(shù)據(jù)交互。

      單例(Singleton)

      單例通常使用靜態(tài)和/或shared_ptr實(shí)現(xiàn)。

      避免堆操作

      堆操作在多線程環(huán)境中要慢得多,在許多甚至大多數(shù)情況下,復(fù)制數(shù)據(jù)會更快,更別提還有move操作這之類的東西。

      互斥對象(mutex)和可變對象(mutable)一起使用(M&M規(guī)則,C++11)

      對于成員變量,最好同時使用互斥鎖和可變變量,這在兩方面都適用:

      • 可變成員變量被假定為共享變量,因此應(yīng)該與互斥鎖同步(或原子化)。

      • 如果一個成員變量本身是互斥的,那么應(yīng)該是可變的,這是在const成員函數(shù)中使用它所必需的。

      更多信息請參閱Herb Sutter的文章: GotW #6a Solution: Const-Correctness, Part 1

      也可以參考前面關(guān)于const &返回值安全性的討論。

      你好,我是俞凡,在Motorola做過研發(fā),現(xiàn)在在Mavenir做技術(shù)工作,對通信、網(wǎng)絡(luò)、后端架構(gòu)、云原生、DevOps、CICD、區(qū)塊鏈、AI等技術(shù)始終保持著濃厚的興趣,平時喜歡閱讀、思考,相信持續(xù)學(xué)習(xí)、終身成長,歡迎一起交流學(xué)習(xí)。
      微信公眾號:DeepNoMind

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多