一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

Q4MP_gh_c472c21 ? 來源:嵌入式ARM ? 作者:bug菌 ? 2021-02-10 17:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

大伙估計(jì)在多任務(wù)程序中使用printf打印一些信息是非常歡樂的一件事,運(yùn)氣不錯(cuò)的話偶爾錯(cuò)幾個(gè)數(shù)據(jù)、亂幾個(gè)碼也不是什么大問題,倒霉點(diǎn)的可能就直接掛機(jī)、卡死了,那這些到底是什么原因?qū)е碌哪兀? 今天的這篇文章應(yīng)該可以幫助你解決一大部分問題。

01

兩個(gè)概念

1、可重入函數(shù) 多任務(wù)系統(tǒng)中每個(gè)進(jìn)程或線程都是由多種執(zhí)行流并發(fā)運(yùn)行的,當(dāng)執(zhí)行流同時(shí)進(jìn)入同一個(gè)函數(shù)(大部分是由于中斷),而不會(huì)導(dǎo)致函數(shù)結(jié)果不確定或者錯(cuò)誤,就可認(rèn)為該函數(shù)是可重入的。

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

上圖中的signal一般都是因?yàn)橹袛嗟仍虍a(chǎn)生的,在我們多任務(wù)系統(tǒng)中中斷更是無時(shí)無刻的在隨機(jī)發(fā)生著,一旦線程或者進(jìn)程被中斷轉(zhuǎn)而去執(zhí)行消息處理,而恰巧的是此時(shí)線程所執(zhí)行的操作與信號(hào)處理相同,比如malloc,他們都共享同一個(gè)資源(全局堆空間)。 當(dāng)信號(hào)處理返回到原來的執(zhí)行流中卻由于信號(hào)處理的改寫而受影響,比如重入的問題導(dǎo)致malloc會(huì)分配相同的內(nèi)存區(qū)域,或者其他的數(shù)據(jù)篡改,鎖死等,這樣該函數(shù)就是不可重入的。 2、線程安全 多個(gè)線程并發(fā)運(yùn)行且執(zhí)行相同的代碼,而不會(huì)導(dǎo)致運(yùn)行結(jié)果受影響,我們就認(rèn)為是線程安全。

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

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

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

02

不可重入死鎖

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

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

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

03

可重入的識(shí)別

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

1、標(biāo)準(zhǔn)IO函數(shù)都會(huì)使用到全局的數(shù)據(jù)結(jié)構(gòu),比如printf函數(shù) : 由于使用了全局標(biāo)準(zhǔn)輸出stdout,所以線程不安全也就更不能重入了。

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

3、對(duì)于全局、靜態(tài)的資源的訪問都會(huì)導(dǎo)致線程不安全,比如一些函數(shù)使用的是靜態(tài)緩存區(qū)等,你可以使用本地copy加臨界區(qū)來進(jìn)行保護(hù),盡量使用局部變量。

4、調(diào)用不可重入或者線程不安全的函數(shù)也會(huì)繼承對(duì)應(yīng)特點(diǎn)。

責(zé)任編輯:xj

原文標(biāo)題:同事"可重入"與"線程安全"老分不清,導(dǎo)致一堆bug!

文章出處:【微信公眾號(hào):嵌入式ARM】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

    關(guān)注

    3

    文章

    4381

    瀏覽量

    64865
  • BUG
    BUG
    +關(guān)注

    關(guān)注

    0

    文章

    156

    瀏覽量

    16022
  • 線程安全
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    2555

原文標(biāo)題:同事"可重入"與"線程安全"老分不清,導(dǎo)致一堆bug!

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    地?zé)岚l(fā)電環(huán)網(wǎng)柜局放監(jiān)測(cè)設(shè)備:清潔能源電網(wǎng)的"安全衛(wèi)士"

    文章由山東華科信息技術(shù)有限公司提供在"雙碳"目標(biāo)驅(qū)動(dòng)下,地?zé)岚l(fā)電作為穩(wěn)定基荷電源,其電網(wǎng)接入設(shè)備的可靠性至關(guān)重要。環(huán)網(wǎng)柜作為地?zé)犭娬九c主網(wǎng)連接的關(guān)鍵節(jié)點(diǎn),其內(nèi)部絕緣缺陷可能引發(fā)
    的頭像 發(fā)表于 07-16 10:15 ?88次閱讀
    地?zé)岚l(fā)電環(huán)網(wǎng)柜局放監(jiān)測(cè)設(shè)備:清潔能源電網(wǎng)的&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;<b class='flag-5'>安全</b>衛(wèi)士&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;

    光耦合器:新能源世界的&amp;quot;綠色信使&amp;quot;

    在人類追求綠色能源的奇幻旅程中,有一個(gè)身披透明鎧甲的&quot;光影使者&quot;正在默默改寫能源史。它不是閃閃發(fā)光的太陽能板,也不是呼呼轉(zhuǎn)動(dòng)的風(fēng)力葉片,而是藏在電路板深處的光耦合器。這個(gè)能用光傳遞信號(hào)的電子精靈,正在新能源革
    的頭像 發(fā)表于 07-11 17:13 ?155次閱讀

    為什么GNSS/INS組合被譽(yù)為導(dǎo)航界的&amp;amp;quot;黃金搭檔&amp;amp;quot;?

    在導(dǎo)航技術(shù)領(lǐng)域,GNSS(全球?qū)Ш叫l(wèi)星系統(tǒng))和INS(慣性導(dǎo)航系統(tǒng))的結(jié)合,一直被業(yè)界譽(yù)為&quot;黃金搭檔&quot;。它們優(yōu)勢(shì)互補(bǔ),克服了單一系統(tǒng)的局限性,為高精度、高可靠性的導(dǎo)航提供了完美
    的頭像 發(fā)表于 07-09 17:12 ?178次閱讀
    為什么GNSS/INS組合被譽(yù)為導(dǎo)航界的&<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>;?

    工業(yè)數(shù)采很多數(shù)據(jù)你可能用不上,不同系統(tǒng)要的&amp;quot;數(shù)據(jù)菜&amp;quot;要對(duì)號(hào)入座

    工業(yè)數(shù)采的本質(zhì),是給不同的系統(tǒng)&quot;投喂&quot;它們能消化的數(shù)據(jù)。就像請(qǐng)客吃飯,MES要的是&quot;快餐&quot;(快節(jié)奏數(shù)據(jù)),QMS要的是&
    的頭像 發(fā)表于 06-11 11:29 ?254次閱讀

    人形機(jī)器人為什么要定制? ——揭秘工業(yè)場(chǎng)景的&amp;quot;千面需求&amp;quot;

    核心洞察:標(biāo)準(zhǔn)化機(jī)器人難以破解工業(yè)場(chǎng)景的&quot;需求碎片化&quot;困局。富唯智能通過?&quot;五大模塊柔性架構(gòu)+零代碼中樞&quot;?,為?人形機(jī)器人為什么要定制?提供了
    的頭像 發(fā)表于 06-10 17:19 ?307次閱讀
    人形機(jī)器人為什么要定制? ——揭秘工業(yè)場(chǎng)景的&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;千面需求&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;

    倉儲(chǔ)界的&amp;quot;速效救心丸&amp;quot;,Ethercat轉(zhuǎn)PROFINET網(wǎng)關(guān)實(shí)戰(zhàn)案例

    實(shí)戰(zhàn)案例,Ethercat轉(zhuǎn)PROFINET網(wǎng)關(guān),倉儲(chǔ)界的&quot;速效救心丸&quot;
    的頭像 發(fā)表于 05-11 10:32 ?300次閱讀
    倉儲(chǔ)界的&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;速效救心丸&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;,Ethercat轉(zhuǎn)PROFINET網(wǎng)關(guān)實(shí)戰(zhàn)案例

    中美貿(mào)易硬核破局!先積集成以中國&amp;amp;quot;芯&amp;amp;quot;智造筑牢供應(yīng)鏈護(hù)城河

    加速鍵,&quot;當(dāng)技術(shù)封鎖成為常態(tài),國產(chǎn)替代不再是備選,而是生存剛需。&quot;一全鏈國產(chǎn)鐵三角中國芯強(qiáng)勢(shì)崛起!我們以&quot;設(shè)計(jì)-制造-封測(cè)&quot;全鏈國產(chǎn)鐵三角,構(gòu)建
    的頭像 發(fā)表于 04-27 10:49 ?290次閱讀
    中美貿(mào)易硬核破局!先積集成以中國&<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>;智造筑牢供應(yīng)鏈護(hù)城河

    電纜局部放電在線監(jiān)測(cè):守護(hù)電網(wǎng)安全的&amp;amp;quot;黑科技&amp;amp;quot;

    運(yùn)行的命脈。而在這場(chǎng)與時(shí)間的賽跑中,電纜局部放電在線監(jiān)測(cè)技術(shù)正扮演著&quot;安全衛(wèi)士&quot;的角色,用科技力量將隱患扼殺于萌芽狀態(tài)。一、看不見的&quot;定時(shí)炸彈&
    的頭像 發(fā)表于 04-14 18:12 ?322次閱讀
    電纜局部放電在線監(jiān)測(cè):守護(hù)電網(wǎng)<b class='flag-5'>安全</b>的&<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>;

    煉油廠開閉所局放監(jiān)測(cè):為能源樞紐裝上&amp;amp;quot;智能安全閥&amp;amp;quot;

    &quot;,可能點(diǎn)燃易燃?xì)怏w,引發(fā)連鎖爆炸。傳統(tǒng)監(jiān)測(cè)手段在防爆環(huán)境下捉襟見肘,而局放在線監(jiān)測(cè)系統(tǒng)正為煉油廠筑起智能安全屏障。一、局放隱患:煉油廠開閉所的&quot;定時(shí)炸彈&quot
    的頭像 發(fā)表于 04-09 16:41 ?329次閱讀
    煉油廠開閉所局放監(jiān)測(cè):為能源樞紐裝上&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;智能<b class='flag-5'>安全</b>閥&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;

    隧道管廊變壓器局放在線監(jiān)測(cè):為地下&amp;amp;quot;電力心臟&amp;amp;quot;裝上智能聽診器

    可能因老化、受潮產(chǎn)生局部放電,如同潛伏的&quot;電蝕暗流&quot;,持續(xù)威脅著電力輸送的安全。如何為這顆&quot;心臟&quot;裝
    的頭像 發(fā)表于 04-09 16:37 ?339次閱讀
    隧道管廊變壓器局放在線監(jiān)測(cè):為地下&<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>;裝上智能聽診器

    【硬核測(cè)評(píng)】凌華DAQE雙雄爭(zhēng)霸:工業(yè)數(shù)據(jù)采集界的&amp;amp;quot;速度與激情&amp;amp;quot;實(shí)戰(zhàn)解析

    在汽車碰撞測(cè)試的驚險(xiǎn)瞬間,半導(dǎo)體晶圓的微觀世界,甚至是狂風(fēng)呼嘯的風(fēng)力發(fā)電場(chǎng),一場(chǎng)關(guān)于數(shù)據(jù)采集的&quot;軍備競(jìng)賽&quot;正在上演。凌華科技推出的DAQE-2010與DAQE-2010(G)這對(duì)&quot;黃金搭檔&
    的頭像 發(fā)表于 03-26 15:07 ?382次閱讀
    【硬核測(cè)評(píng)】凌華DAQE雙雄爭(zhēng)霸:工業(yè)數(shù)據(jù)采集界的&<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>;實(shí)戰(zhàn)解析

    力合微電子攜手中山古鎮(zhèn)政府開啟&amp;amp;quot;智光互聯(lián)&amp;amp;quot;新紀(jì)元 共筑全球智能照明產(chǎn)業(yè)高地

    2025年3月18日,在第32屆中國古鎮(zhèn)國際燈飾博覽會(huì)的聚光燈下,力合微電子與中山市古鎮(zhèn)鎮(zhèn)政府簽署戰(zhàn)略合作協(xié)議,啟動(dòng)&quot;智光互聯(lián)&quot;合作項(xiàng)目。作為國內(nèi)物聯(lián)網(wǎng)通信技術(shù)與芯片研發(fā)的領(lǐng)軍
    的頭像 發(fā)表于 03-19 09:47 ?613次閱讀
    力合微電子攜手中山古鎮(zhèn)政府開啟&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;智光互聯(lián)&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;新紀(jì)元 共筑全球智能照明產(chǎn)業(yè)高地

    3分鐘讀懂 | 氣密性檢測(cè)儀如何&amp;amp;quot;揪出&amp;amp;quot;泄漏點(diǎn)?原理全拆解!

    在日常生活中,我們可能很少直接接觸到氣密性檢測(cè)儀,但在工業(yè)生產(chǎn)、汽車制造、醫(yī)療器械等領(lǐng)域,它卻是不可或缺的&quot;神器&quot;。那么,這個(gè)看似神秘的設(shè)備究竟是如何工作的?它又是如何精準(zhǔn)
    的頭像 發(fā)表于 03-15 16:13 ?356次閱讀
    3分鐘讀懂 | 氣密性檢測(cè)儀如何&<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>;泄漏點(diǎn)?原理全拆解!

    創(chuàng)新驅(qū)動(dòng)未來:大為錫膏為高精尖散熱器技術(shù)注入&amp;amp;quot;強(qiáng)芯&amp;amp;quot;動(dòng)力

    在人工智能、區(qū)塊鏈、人形機(jī)器人、高性能計(jì)算等前沿技術(shù)飛速發(fā)展的今天,電子設(shè)備的&quot;體溫管理&quot;正成為決定技術(shù)突破的關(guān)鍵門檻。當(dāng)算力以指數(shù)級(jí)增長(zhǎng)時(shí),散熱器作為設(shè)備的&quot;隱形
    的頭像 發(fā)表于 02-13 10:41 ?400次閱讀
    創(chuàng)新驅(qū)動(dòng)未來:大為錫膏為高精尖散熱器技術(shù)注入&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;強(qiáng)芯&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;動(dòng)力

    軟通動(dòng)力攜手華為啟動(dòng)&amp;quot;智鏈險(xiǎn)界&amp;quot;計(jì)劃,強(qiáng)化生態(tài)鏈接共啟保險(xiǎn)AI新時(shí)代

    軟通動(dòng)力攜子品牌軟通金科受邀參加此次大會(huì),發(fā)表&quot;智馭未來 ? 探索保險(xiǎn)AI新業(yè)態(tài)&quot;主旨演講,并攜手華為正式啟動(dòng)&quot;智鏈險(xiǎn)界——保險(xiǎn)生態(tài)場(chǎng)景鏈接計(jì)劃&quot
    的頭像 發(fā)表于 09-23 19:22 ?690次閱讀
    軟通動(dòng)力攜手華為啟動(dòng)&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;智鏈險(xiǎn)界&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;計(jì)劃,強(qiáng)化生態(tài)鏈接共啟保險(xiǎn)AI新時(shí)代