精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C++可移植性及多線程

C語言與CPP編程 ? 來源:C語言與CPP編程 ? 作者:C語言與CPP編程 ? 2022-10-10 10:26 ? 次閱讀

本系列是開源書C++ Best Practises[1]的中文版,全書從工具、代碼風格、安全性、可維護性、可移植性、多線程、性能、正確性等角度全面介紹了現代C++項目的最佳實踐。本文是該系列的第五篇。

C++最佳實踐:

1. 工具

2. 代碼風格

3.安全性

4.可維護性

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

6.性能

7.正確性和腳本

可移植性

明確使用的類型

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

使用標準庫

std::filesystem

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

std::thread

C++11的線程功能能夠基于pthread或WinThreads使用。

其他

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

多線程

避免全局數據

全局數據會導致函數之間意想不到的副作用,并可能使代碼難以甚至無法并行化。即使現在的代碼不是為了并行化而寫,也沒有理由在將來永遠不做并行化。

靜態(static)數據

除了作為全局數據之外,靜態數據并不總是像期望的那樣被構造和析構,在跨平臺環境中尤其如此。例如,有個g++的bug[2]就是關于從動態模塊加載的共享靜態數據的銷毀順序的。

共享指針

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

單例(Singleton)

單例通常使用靜態和/或shared_ptr實現。

避免堆操作

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

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

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

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

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

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C++
    C++
    +關注

    關注

    22

    文章

    2104

    瀏覽量

    73503
  • 代碼
    +關注

    關注

    30

    文章

    4753

    瀏覽量

    68368
  • 可移植性
    +關注

    關注

    0

    文章

    5

    瀏覽量

    7600

原文標題:C++最佳實踐 | 5. 可移植性及多線程

文章出處:【微信號:C語言與CPP編程,微信公眾號:C語言與CPP編程】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    現代C++項目的最佳實踐

    本系列是開源書C++ Best Practises[1]的中文版,全書從工具、代碼風格、安全、可維護可移植性多線程、性能、正確
    發表于 09-29 11:32 ?1130次閱讀

    Multi-Threaded多線程編程

    C++ 多線程(一)Multi-Threaded多線程編程術語線程更確切地說,是執行線程,它是最小的處理單元。由操作系統調度。通常它包含在進
    發表于 08-24 08:31

    一文搞懂C++多線程rknn_ssd例程

    1、C++多線程rknn_ssd例程簡析本例程修改自rk官方提供的rknn_sdd.cpp,處理的數據流來自usb-camera,幀率在25fps添加本地視頻讀取功能,640x480的視頻流,幀率可達50fps支持線程綁定CPU
    發表于 08-01 17:53

    C++ 面向對象多線程編程下載

    C++ 面向對象多線程編程下載
    發表于 04-08 02:14 ?70次下載

    C++面向對象多線程編程 (pdf電子版)

    C++面向對象多線程編程共分13章,全面講解構建多線程架構與增量多線程編程技術。第1章介紹了
    發表于 09-25 09:39 ?0次下載

    多線程編程之Linux線程編程

    可移植性。 (1)函數說明。 創建線程實際上就是確定調用該線程函數的入口點,這里通常使用的函數是pthread_create()。在線程創建以后,就開始運行相關的
    發表于 10-18 15:55 ?3次下載

    C#多線程技術

    C#和.NET類庫為開發多線程應用程序提供了很方便的支持,本章首先簡要介紹.NET類庫中的Thread類及各種線程支持,再通過示例說明線程使用中需要掌握的規則,最后論述
    發表于 04-23 11:32 ?15次下載

    一文解讀32位單片機的應用可移植性

    本文主要介紹了32位單片機的應用可移植性.
    發表于 06-28 03:25 ?0次下載
    一文解讀32位單片機的應用<b class='flag-5'>可移植性</b>

    多線程架構存在的必要

    多線程架構存在的必要說明。
    發表于 03-26 11:22 ?8次下載
    <b class='flag-5'>多線程</b>架構存在的必要<b class='flag-5'>性</b>

    C++項目常見的命名規范

    本系列是開源書C++ Best Practises[1]的中文版,全書從工具、代碼風格、安全、可維護可移植性多線程、性能、正確
    的頭像 發表于 09-27 09:12 ?2057次閱讀

    如何使用in_place_t和相關標簽高效創建

    本系列是開源書C++ Best Practises[1]的中文版,全書從工具、代碼風格、安全、可維護可移植性多線程、性能、正確
    的頭像 發表于 10-13 08:59 ?886次閱讀

    多線程編程可以應用在哪里?C++多線程詳解

    多線程并發指的是在同一個進程中執行多個線程。 優點: 有操作系統相關知識的應該知道,線程是輕量級的進程,每個線程可以獨立的運行不同的指令序列,但是
    發表于 04-13 10:10 ?668次閱讀

    如何用C++實現一個線程池呢?

    C++線程池是一種多線程管理模型,把線程分成任務執行和線程調度兩部分。
    發表于 06-08 14:53 ?1733次閱讀
    如何用<b class='flag-5'>C++</b>實現一個<b class='flag-5'>線程</b>池呢?

    多線程如何保證數據的同步

    多線程編程是一種并發編程的方法,意味著程序中同時運行多個線程,每個線程可獨立執行不同的任務,共享同一份數據。由于多線程并發執行的特點,會引發數據同步的問題,即保證多個
    的頭像 發表于 11-17 14:22 ?1163次閱讀

    mfc多線程編程實例

    MFC(Microsoft Foundation Class Library)是一個基于Windows的C++開發框架,廣泛應用于軟件開發中。MFC提供了許多實用的類和函數,方便開發人員進行GUI
    的頭像 發表于 12-01 14:29 ?1448次閱讀