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

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

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

3天內不再提示

"可重入"和"線程安全"是兩個概念 千萬不要搞混了

Q4MP_gh_c472c21 ? 來源:嵌入式ARM ? 作者:bug菌 ? 2021-02-10 17:38 ? 次閱讀

大伙估計在多任務程序中使用printf打印一些信息是非常歡樂的一件事,運氣不錯的話偶爾錯幾個數據、亂幾個碼也不是什么大問題,倒霉點的可能就直接掛機、卡死了,那這些到底是什么原因導致的呢? 今天的這篇文章應該可以幫助你解決一大部分問題。

01

兩個概念

1、可重入函數 多任務系統中每個進程或線程都是由多種執行流并發運行的,當執行流同時進入同一個函數(大部分是由于中斷),而不會導致函數結果不確定或者錯誤,就可認為該函數是可重入的。

a2100dc0-5f65-11eb-8b86-12bb97331649.png

上圖中的signal一般都是因為中斷等原因產生的,在我們多任務系統中中斷更是無時無刻的在隨機發生著,一旦線程或者進程被中斷轉而去執行消息處理,而恰巧的是此時線程所執行的操作與信號處理相同,比如malloc,他們都共享同一個資源(全局堆空間)。 當信號處理返回到原來的執行流中卻由于信號處理的改寫而受影響,比如重入的問題導致malloc會分配相同的內存區域,或者其他的數據篡改,鎖死等,這樣該函數就是不可重入的。 2、線程安全 多個線程并發運行且執行相同的代碼,而不會導致運行結果受影響,我們就認為是線程安全。

a2b2c6e6-5f65-11eb-8b86-12bb97331649.png

對于線程安全往往加個互斥鎖就可以解決戰斗,當然你如果沒有使用全局變量、靜態變量等等共享資源,那他們基本上是線程安全的。 其實從表面上看這兩個概念并沒有太大的差異,無非就是運行同一塊代碼,會不會導致不確定的結果。 3、VS 再仔細想想,其實這兩個概念所關注的層面是不同的,可重入函數要求相同執行流執行不會受影響,而線程安全僅僅只是在線程這個層面上進行的要求。 所以可重入的要求比線程安全要更加嚴苛,可重入必定線程安全,而線程安全并不一定可重入,如下圖是他們的關系:

a64389d0-5f65-11eb-8b86-12bb97331649.png

02

不可重入死鎖

下面我們來簡單分析一下不可重入死鎖的問題 :

a9f66ade-5f65-11eb-8b86-12bb97331649.png

上圖我們為函數加了互斥lock(不考慮遞歸鎖),那么它就是線程安全的,然而剛把共享資源部分上鎖,隨機的中斷信號處理發生了,轉而執行信號處理函數,而在信號處理中也同樣執行相同的Fuction代碼,此時資源已經鎖住,必須等待前面調用Fuction函數的線程釋放,但此線程又在等待信號處理訪問,最終死鎖,涼涼! 當然你可以使用遞歸鎖來進行處理,這在正常設計中是需要避免的,當時對于一些需要調用外部庫的設計,只能選擇遞歸鎖等。

03

可重入的識別

說實在對于很多玩RTOS的伙計,直接關中斷、開中斷的臨界資源保護就基本告別了一部分不可重入問題,而這樣的操作會影響多任務的并發執行,但是如果你只是加了幾把鎖,可能在程序中不重入的問題還是要注意一下。 這里不可重入問題不完全總結了幾點:

1、標準IO函數都會使用到全局的數據結構,比如printf函數 : 由于使用了全局標準輸出stdout,所以線程不安全也就更不能重入了。

2、malloc和free : 這兩個函數都是在全局的堆空間上進行操作,如果有加鎖那就是線程安全的,但是不可重入。

3、對于全局、靜態的資源的訪問都會導致線程不安全,比如一些函數使用的是靜態緩存區等,你可以使用本地copy加臨界區來進行保護,盡量使用局部變量。

4、調用不可重入或者線程不安全的函數也會繼承對應特點。

責任編輯:xj

原文標題:同事"可重入"與"線程安全"老分不清,導致一堆bug!

文章出處:【微信公眾號:嵌入式ARM】歡迎添加關注!文章轉載請注明出處。

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

    關注

    3

    文章

    4306

    瀏覽量

    62430
  • BUG
    BUG
    +關注

    關注

    0

    文章

    155

    瀏覽量

    15651
  • 線程安全
    +關注

    關注

    0

    文章

    13

    瀏覽量

    2456

原文標題:同事"可重入"與"線程安全"老分不清,導致一堆bug!

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    江西薩瑞微榮獲"2024全國第三代半導體制造最佳新銳企業"稱號

    快速發展與創新實力在2024全國第三代半導體產業發展大會上,江西薩瑞微電子科技有限公司榮獲"2024全國第三代半導體制造最佳新銳企業"稱號。這一榮譽不僅是對公司技術創新和產業化
    的頭像 發表于 10-31 08:09 ?248次閱讀
    江西薩瑞微榮獲&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;2024全國第三代半導體制造最佳新銳企業&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;稱號

    OCTC發布&amp;quot;算力工廠&amp;quot;!力促智算中心高效規劃建設投運

    創新提出面向未來數據中心的&quot;算力工廠&quot;模式,核心是以規(劃)、建(設)、運(營)一體化的交鑰匙工程,實現智算中心快速投運、綠色低碳,在當前AIGC算力供需挑戰下,開創了智算中心建設運營的新思路、新方法,讓客戶在智算中心建設運營上更省心、更省力。
    的頭像 發表于 10-11 09:10 ?484次閱讀
    OCTC發布&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;算力工廠&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;!力促智算中心高效規劃建設投運

    軟通動力攜手華為啟動&amp;quot;智鏈險界&amp;quot;計劃,強化生態鏈接共啟保險AI新時代

    軟通動力攜子品牌軟通金科受邀參加此次大會,發表&quot;智馭未來 ? 探索保險AI新業態&quot;主旨演講,并攜手華為正式啟動&quot;智鏈險界——保險生態場景鏈接計劃&quot
    的頭像 發表于 09-23 19:22 ?322次閱讀
    軟通動力攜手華為啟動&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;智鏈險界&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;計劃,強化生態鏈接共啟保險AI新時代

    全方位精準測量技術助力:中國經濟加力發展向前&amp;amp;quot;進&amp;amp;quot;

    全方位精準測量技術助力:中國經濟加力發展向前&quot;進&quot;
    的頭像 發表于 07-15 09:53 ?311次閱讀
    全方位精準測量技術助力:中國經濟加力發展向前&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;進&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;

    晶科能源榮獲EUPD Research授予的六項&amp;quot;頂級光伏品牌&amp;quot;稱號

    近日,由權威調研機構EUPD Research頒發,晶科能源在巴西、哥倫比亞、墨西哥、智利等拉美主要國家六地區榮獲 &quot;頂級光伏品牌 &quot;稱號。憑借先進的技術、完善的流程和對卓越的不懈追求,晶科能源將繼續提升行
    的頭像 發表于 05-10 09:17 ?475次閱讀
    晶科能源榮獲EUPD Research授予的六項&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;頂級光伏品牌&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;稱號

    九聯科技推出一款&amp;quot;射手座&amp;quot;UMA502-T7物聯網模組

    在物聯網技術飛速發展的時代背景下,九聯科技憑借深厚的研發底蘊與創新精神,精心打造出象征著自由探索與勇敢進取精神的&quot;射手座&quot;UMA502-T7模組,以昂揚之姿挺進海外市場,宣告了九聯科技物聯網模組國際化進程的盛大起航。
    的頭像 發表于 04-14 09:38 ?846次閱讀

    2024CCLTA | &amp;quot;智&amp;quot;領檢驗,&amp;quot;慧&amp;quot;聚山城

    上海2024年4月2日?/美通社/ --?2024年3月28日-31日,以"融合發展,引領未來"為主題的第十屆全國檢驗醫學技術與應用學術會議暨協同創新、融合發展國際論壇,第十屆全國臨床檢驗裝備展覽會(CCLTA2024)在重慶拉開帷幕。展會上,貝克曼庫爾特分享了"智慧檢驗"、"疾病管理"、"創升中國"下的重要力作,包括全自動化學發光免疫分析DxI800、全自動生化分析儀AU5800、微生物鑒定藥敏分析儀DxM1096、智研平臺、DxAI智控平臺LabBox Innovation等。 展會現場照片 作為體外
    的頭像 發表于 04-07 18:19 ?1054次閱讀
    2024CCLTA | &<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;智&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;領檢驗,&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;慧&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;聚山城

    科沃斯掃地機器人通過TüV萊茵&amp;quot;防纏繞&amp;quot;和&amp;quot;高效邊角清潔&amp;quot;認證

    3月15日,在2024中國家電及消費電子博覽會(AWE)上,國際獨立第三方檢測、檢驗和認證機構德國萊茵TüV大中華區(簡稱&quot;TüV萊茵&quot;)為科沃斯款掃地機器人(型號:DDX14、DDX11)
    的頭像 發表于 03-17 10:49 ?829次閱讀

    Quanterix宣布Tau217血液檢測被美國FDA授予 &amp;quot;突破性器械 &amp;quot;認證

    3月4日,Quanterix宣布其Simoa磷酸化Tau217(p-Tau 217)血液檢測已被美國FDA授予 &quot;突破性器械 &quot;認證,可用于阿爾茨海默病 (AD) 的輔助診斷評估。
    的頭像 發表于 03-12 17:23 ?2253次閱讀

    電池&amp;quot;無&amp;quot;隔膜?SEI新&amp;quot;膜&amp;quot;法!

    枝晶是阻礙鋅基水系電池發展的一亟待解決的問題。電沉積過程主要包含離子遷移、電還原和電結晶三步驟。
    的頭像 發表于 03-11 10:03 ?919次閱讀
    電池&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;無&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;隔膜?SEI新&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;膜&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;法!

    中創新航榮獲逸動科技2023年度&amp;quot;優秀戰略合作伙伴獎&amp;quot;

    近日,中創新航憑借電動船舶領域領先的技術實力、卓越的產品質量、持續穩定的交付能力以及優質高效的服務,榮獲逸動科技2023年度&quot;優秀戰略合作伙伴獎&quot;。
    的頭像 發表于 02-29 13:51 ?459次閱讀

    第二代配網行波故障預警與定位裝置YT/XJ-001:守護電力線路的超能&amp;amp;quot;哨兵&amp;amp;quot;

    第二代配網行波故障預警與定位裝置YT/XJ-001:守護電力線路的超能&quot;哨兵&quot; 電力,如同現代社會的血脈,支撐著我們的生活和工作正常運行。然而,一旦這條血脈出現故障,生活和工作
    的頭像 發表于 01-22 15:11 ?514次閱讀
    第二代配網行波故障預警與定位裝置YT/XJ-001:守護電力線路的超能&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;哨兵&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;

    PSOC6使用帶有2ADC通道的DMA如何設置 \&quot; 源 \&quot; 地址?

    ,然后觸發中斷。 然后我讀取了中斷函數中的兩個 ADC 結果。 20kHz 時的 PWM —--&amp;gt; &amp;gt; \&quot; soc \&
    發表于 01-19 07:47

    電流互感器帶&amp;quot;S&amp;quot;和不帶S所表示的含義及區別

    電流互感器帶&quot;S&quot;和不帶S都是表示測量電流互感器精度等級。在規定使用條件下,互感器的誤差在該等級規定的限值之內。電力工程中計量常用的等級有0.2、0.5、0.2S、0.5S等。
    的頭像 發表于 01-14 10:32 ?1481次閱讀
    電流互感器帶&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;S&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;和不帶S所表示的含義及區別

    智慧光迅榮獲2023年&amp;quot;智能物聯成長力企業&amp;quot;獎項

    深圳智慧光迅信息技術有限公司榮獲2023年中國物聯網產業大會的&quot;智能物聯成長力企業&quot;獎項。
    的頭像 發表于 12-09 10:21 ?889次閱讀