99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++可移植性及多線程

C語言與CPP編程 ? 來源:C語言與CPP編程 ? 作者:C語言與CPP編程 ? 2022-10-10 10:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

C++最佳實踐:

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類型的使用。

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

std::filesystem

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

std::thread

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

其他

本系列中的其他大多數(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[2]就是關(guān)于從動態(tài)模塊加載的共享靜態(tài)數(shù)據(jù)的銷毀順序的。

共享指針

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

單例(Singleton)

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

避免堆操作

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

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

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

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

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

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2119

    瀏覽量

    75361
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70798
  • 可移植性
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    7678

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    現(xiàn)代C++項目的最佳實踐

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

    Multi-Threaded多線程編程

    C++ 多線程(一)Multi-Threaded多線程編程術(shù)語線程更確切地說,是執(zhí)行線程,它是最小的處理單元。由操作系統(tǒng)調(diào)度。通常它包含在進(jìn)
    發(fā)表于 08-24 08:31

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

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

    C++ 面向?qū)ο?b class='flag-5'>多線程編程下載

    C++ 面向?qū)ο?b class='flag-5'>多線程編程下載
    發(fā)表于 04-08 02:14 ?70次下載

    C++面向?qū)ο?b class='flag-5'>多線程編程 (pdf電子版)

    C++面向?qū)ο?b class='flag-5'>多線程編程共分13章,全面講解構(gòu)建多線程架構(gòu)與增量多線程編程技術(shù)。第1章介紹了
    發(fā)表于 09-25 09:39 ?0次下載

    多線程編程之Linux線程編程

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

    C#多線程技術(shù)

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

    一文解讀32位單片機(jī)的應(yīng)用可移植性

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

    多線程架構(gòu)存在的必要

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

    C++項目常見的命名規(guī)范

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

    如何使用in_place_t和相關(guān)標(biāo)簽高效創(chuàng)建

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

    多線程編程可以應(yīng)用在哪里?C++多線程詳解

    多線程并發(fā)指的是在同一個進(jìn)程中執(zhí)行多個線程。 優(yōu)點: 有操作系統(tǒng)相關(guān)知識的應(yīng)該知道,線程是輕量級的進(jìn)程,每個線程可以獨立的運行不同的指令序列,但是
    發(fā)表于 04-13 10:10 ?869次閱讀

    如何用C++實現(xiàn)一個線程池呢?

    C++線程池是一種多線程管理模型,把線程分成任務(wù)執(zhí)行和線程調(diào)度兩部分。
    發(fā)表于 06-08 14:53 ?2071次閱讀
    如何用<b class='flag-5'>C++</b>實現(xiàn)一個<b class='flag-5'>線程</b>池呢?

    多線程如何保證數(shù)據(jù)的同步

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

    mfc多線程編程實例

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