<blockquote id="ue9b1"></blockquote>
    
    

    <style id="ue9b1"></style>
      <sub id="ue9b1"><p id="ue9b1"><form id="ue9b1"></form></p></sub>

      <strong id="ue9b1"><button id="ue9b1"><mark id="ue9b1"></mark></button></strong>
      成年午夜性影院,下面一进一出好爽视频,国产无遮挡又黄又爽又色,国产精品爽爽v在线观看无码,国产人妻久久精品一区二区三区,国产伦精品一区二区三区免费迷,国产欧美精品一区二区三区,日韩精品一区二区三区视频
      網(wǎng)易首頁 > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

      編程經(jīng)典案例:當(dāng)線程遇到For循環(huán),一個(gè)不可思議的Bug就出現(xiàn)了!

      0
      分享至

      我們公司有個(gè)項(xiàng)目,需要視覺定位,大致就是在產(chǎn)品上會(huì)有一個(gè)“十字”形狀的Mark標(biāo)記,然后通過視覺相機(jī)連續(xù)拍照,然后將拍到的圖片進(jìn)行視覺算法運(yùn)算,最終得出Mark標(biāo)記的位置,然后根據(jù)其位置對(duì)設(shè)備進(jìn)行位置糾正。但是,想不到就這么一個(gè)小功能卻出現(xiàn)了一個(gè)Bug,找了很久才發(fā)現(xiàn)原因!



      說這個(gè)Bug之前,我需要先說下這個(gè)Bug是怎么被我寫出來的!說這個(gè)Bug之前,我需要先說下這個(gè)Bug是怎么被我寫出來的!

      甲方那有一個(gè)設(shè)備,設(shè)備上有一個(gè)可以前后移動(dòng)的軸,下稱M軸,軸上又裝了一個(gè)可以左右移動(dòng)的軸,類似于貼片機(jī)的構(gòu)造吧。我們用來視覺定位的相機(jī)就是裝在那個(gè)可以左右移動(dòng)的軸上面的,下面簡稱P軸。

      Mark標(biāo)記處于P軸的初始位置,而且Mark的左右視野范圍被設(shè)定成不可超過P軸的初始位置,因此,要用Mark進(jìn)行定位,只需要M軸前后移動(dòng),相機(jī)進(jìn)行拍照即可,最后再根據(jù)Mark的位置調(diào)整P軸的位置。

      最開始,我選擇的是一張一張得拍,并且我在封裝相機(jī)SDK的時(shí)候,取圖我只封裝了一個(gè)取單張圖片的接口。



      后來發(fā)現(xiàn)算法速度跟不上M軸移動(dòng)的速度,當(dāng)相機(jī)拍了一張照片,然后程序再對(duì)照片進(jìn)行視覺運(yùn)算,中間會(huì)產(chǎn)生一定時(shí)間的間隙,當(dāng)程序算完以后,M軸已經(jīng)移動(dòng)很遠(yuǎn)了,拍到下一張圖片的時(shí)候,信息就會(huì)丟失一部分空間畫面。

      如果Mark恰巧處于這個(gè)空間之內(nèi),那么很大概率就拍不到Mark標(biāo)記了!

      所以,我又在相機(jī)SDK里面重新封裝了一個(gè)接口,用來批量取圖,然后返回圖片地址列表,大致的邏輯就是根據(jù)視覺相機(jī)設(shè)置的幀率乘以M軸移動(dòng)的總時(shí)間,換算出相機(jī)應(yīng)該拍照的總照片數(shù),假設(shè)相機(jī)幀率是10幀每秒,M軸總移動(dòng)時(shí)間是3秒,那么應(yīng)該取出的圖片就是10*3=30張。



      這么做的目的就是在M軸移動(dòng)的時(shí)候,純拍照片,然后將拍到的圖片保存在緩存目錄里面,其他什么都不做,這樣能讓視覺相機(jī)使用最大幀率去取圖,從而覆蓋M軸行程內(nèi)的所有空間。最后,循環(huán)所有已經(jīng)拍到的圖片,總有一張或者幾張圖片里面存在Mark標(biāo)記!最后,再一次性返回所有圖片的保存地址。

      雖然這個(gè)方案很好,但是在實(shí)際運(yùn)行過程中卻出現(xiàn)了一個(gè)小的Bug,那就是Mark的檢測結(jié)果和實(shí)際展示圖片對(duì)不上!并且,還不是每次都會(huì)出現(xiàn)這樣的Bug,有時(shí)候就是好的。

      癥狀就是,很多時(shí)候顯示的圖片里面明明沒有Mark標(biāo)記,但是算法卻能識(shí)別出Mark標(biāo)記來,或者有Mark標(biāo)記,但是Mark標(biāo)記被檢測出來的上下位置卻不一樣,可偏偏結(jié)果還是正確的!

      最開始,我以為是算法有問題,后來這個(gè)問題很快被排除了。

      那會(huì)不會(huì)是在循環(huán)圖片時(shí),把圖片索引搞錯(cuò)了呢?我仔細(xì)看了下我循環(huán)圖片,對(duì)圖片進(jìn)行視覺運(yùn)算的那段代碼,也沒發(fā)現(xiàn)問題。

      本來,這個(gè)問題其實(shí)很好解決的,只要下個(gè)斷點(diǎn)調(diào)試一下就能發(fā)現(xiàn)問題出在哪,可偏偏軟件已經(jīng)部署在了甲方那里,問題只能通過我們公司放在甲方那邊的同事跟我復(fù)述,我通過在代碼里面加運(yùn)行日志來分析問題出現(xiàn)的原因。

      因?yàn)槿罩究倸w是人加的,它只能被加在我可能認(rèn)為會(huì)出問題的地方,一些我不認(rèn)為會(huì)出現(xiàn)問題的地方我是不會(huì)加的。

      但偏偏有一個(gè)地方我就忽略了!

      前面說了,我在視覺相機(jī)的SDK里面重新封裝了一個(gè)批量取圖的接口,而這個(gè)接口的邏輯是通過一個(gè)觸發(fā)拍照命令,輸入指定數(shù)量的圖片和取圖時(shí)間來取圖的,取出來的圖是放在一個(gè)指針數(shù)組里面的,我需要循環(huán)將指針轉(zhuǎn)換成圖片對(duì)象,然后再保存到緩存目錄里。

      因?yàn)閳D片數(shù)量太多,為了保證轉(zhuǎn)換效率,所以,我在循環(huán)指針數(shù)組的時(shí)候,使用了線程池來轉(zhuǎn)換圖片,問題就出在這!

      我外層使用的是一個(gè)普通的循環(huán),因?yàn)槲也还庖D,還需要保存圖片,而圖片名稱的某一個(gè)規(guī)則就是循環(huán)的當(dāng)前索引,如“20250624_0_.jpg”,其中“_0_”中的0就是循環(huán)索引i的值。

      因?yàn)槭褂玫氖蔷€程池來執(zhí)行取圖邏輯,那么在當(dāng)前線程里面直接取i是有問題的!因?yàn)閕的作用域是在循環(huán)內(nèi)部,但是,循環(huán)內(nèi)部如果執(zhí)行的是一個(gè)線程,那么每一個(gè)線程所獲得到的i和這個(gè)線程的作用域不一樣,那么就會(huì)導(dǎo)致這個(gè)線程取到的i實(shí)際并不是順序的!

      這么說不理解的話,我舉一個(gè)極端的例子:

      假設(shè)我們需要拍30張圖片,這30張圖片被存在了一個(gè)指針數(shù)組里,我們通過For循環(huán)去循環(huán)指針數(shù)組,每循環(huán)一次,在線程池里面加一個(gè)線程,用來將指針轉(zhuǎn)換成圖片,而此時(shí),我們PC的線程數(shù)已經(jīng)被其他程序占用,因此,這30個(gè)線程都處于等待狀態(tài),直到最后一次循環(huán),此時(shí)i為30,循環(huán)完成后,此時(shí)前面被占用的線程瞬間被釋放,前面等待的這30個(gè)線程將全部執(zhí)行,此時(shí),這30個(gè)線程里面取到的所有i值將都是30!

      而此時(shí)保存圖片,所有圖片名稱都是一樣的,因?yàn)閳D片保存走的是覆蓋流程,最后程序執(zhí)行下來,只會(huì)保存住一張圖片!

      如果還不懂,請(qǐng)看示例:



      這就是導(dǎo)致前面所有問題的根源!因?yàn)槲以趫?zhí)行批量取圖之后,我需要重新循環(huán)圖片地址列表去讀取圖片,然后對(duì)圖片進(jìn)行視覺運(yùn)算以及顯示。

      結(jié)合上面所說,如果最后30張圖片所有的i都是30的話,那么最終保存的圖片數(shù)量就只有一張了,此時(shí),圖片數(shù)量就是1。



      此時(shí),我如果使用For循環(huán)這么寫:

      For(int I = 0;i<1;i++)

      這么一來,這個(gè)循環(huán)索引0所獲取到的圖片實(shí)際上是 “20250624_30_.jpg”,此時(shí),如果視覺算法通過了,我會(huì)將圖片索引保存,此時(shí)保存的所謂的圖片索引就是0。



      顯然,索引為0的圖片并不存在,因此,在圖片顯示的時(shí)候,這時(shí)候畫面上就只有Mark標(biāo)記框,而沒有實(shí)際圖片。

      那假設(shè)批量取圖數(shù)量是30,但是因?yàn)榫€程的原因,最終保存在文件夾里的圖片只有15張會(huì)出現(xiàn)什么結(jié)果呢?

      很顯然,這時(shí)候循環(huán)索引和所有圖片的實(shí)際索引就都錯(cuò)位了!

      我也在批量取圖后的那個(gè)循環(huán)讀取圖片的For循環(huán)里面也加過日志,但是恰巧當(dāng)時(shí)這個(gè)問題沒出現(xiàn),我以為程序已經(jīng)沒問題了,所以就將日志給去除了,后來再出問題時(shí),就沒往這方面想了。

      至于為什么不保存圖片地址而保存圖片循環(huán)的索引,這個(gè)是業(yè)務(wù)邏輯決定的。

      當(dāng)然,這么寫會(huì)出問題我是知道的,但是,您也知道,有時(shí)候?qū)懘a的事很難說,一個(gè)不注意寫出一個(gè)Bug其實(shí)很難發(fā)現(xiàn)的。

      直到我查遍所有代碼,把所有可能性都一一排除以后,最后瞄了一眼我寫的相機(jī)SDK,一眼就發(fā)現(xiàn)了問題所在!

      總結(jié)

      在For循環(huán)中使用線程,并且在線程里面使用For循環(huán)的索引導(dǎo)致的錯(cuò)誤,其實(shí)這是一個(gè)很經(jīng)典的線程安全案例,我在過去接觸到的很多年輕的程序員在使用線程的時(shí)候基本上都會(huì)遇到這個(gè)問題。

      如何避免這個(gè)問題呢?其實(shí)很簡單,就是強(qiáng)制將For循環(huán)的作用域限制到當(dāng)層循環(huán)之內(nèi),寫法就是:



      前后對(duì)比下,我只是將直接使用i的方式改成了先將i這個(gè)循環(huán)索引先賦值給變量index,然后再去使用,這樣,index這個(gè)變量的作用域就會(huì)被強(qiáng)制鎖定在當(dāng)前循環(huán)內(nèi),不管最終線程什么時(shí)候執(zhí)行,index的值不會(huì)變!

      聲明:個(gè)人原創(chuàng),僅供參考

      特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關(guān)推薦
      熱點(diǎn)推薦
      日媒:日本陸上自衛(wèi)隊(duì)赴美進(jìn)行反無人機(jī)訓(xùn)練

      日媒:日本陸上自衛(wèi)隊(duì)赴美進(jìn)行反無人機(jī)訓(xùn)練

      參考消息
      2025-11-06 14:28:09
      淚目!威廉王子重溫母親戴安娜舊地,打卡著名景點(diǎn)與母親世紀(jì)同框

      淚目!威廉王子重溫母親戴安娜舊地,打卡著名景點(diǎn)與母親世紀(jì)同框

      聰明的橙子hj
      2025-11-06 16:46:49
      167票當(dāng)選!聯(lián)合國變天,新主席對(duì)華態(tài)度不一般?中方提出4個(gè)要求

      167票當(dāng)選!聯(lián)合國變天,新主席對(duì)華態(tài)度不一般?中方提出4個(gè)要求

      愛吃醋的貓咪
      2025-11-07 21:01:04
      哈馬斯領(lǐng)導(dǎo):已與被困在地道中的戰(zhàn)士失聯(lián),擔(dān)心已被餓死

      哈馬斯領(lǐng)導(dǎo):已與被困在地道中的戰(zhàn)士失聯(lián),擔(dān)心已被餓死

      桂系007
      2025-11-07 13:11:32
      玻璃瓶、情趣用品從天而降!一樓住戶因高空拋物苦不堪言,物業(yè)回應(yīng)

      玻璃瓶、情趣用品從天而降!一樓住戶因高空拋物苦不堪言,物業(yè)回應(yīng)

      極目新聞
      2025-11-07 17:45:34
      俄專家:美國如今面對(duì)的中國,是一個(gè)沒有任何缺陷的超級(jí)大國!

      俄專家:美國如今面對(duì)的中國,是一個(gè)沒有任何缺陷的超級(jí)大國!

      花花娛界
      2025-11-07 20:54:57
      陜西通知:12月25日前集中繳費(fèi)! 以免影響報(bào)銷

      陜西通知:12月25日前集中繳費(fèi)! 以免影響報(bào)銷

      91.6陜西交通廣播
      2025-11-07 16:28:45
      俄外長拉夫羅夫缺席俄羅斯內(nèi)部會(huì)議,成為美俄峰會(huì)失敗的罪魁禍?zhǔn)?>
    </a>
        <h3>
      <a href=山河路口
      2025-11-06 23:02:10
      澤連斯基:拒絕政治半成品,堅(jiān)定追求完整歐洲席位。

      澤連斯基:拒絕政治半成品,堅(jiān)定追求完整歐洲席位。

      世界探索者探索
      2025-11-07 21:44:07
      不顧央視警告頂風(fēng)作案,與劉濤傳出緋聞的楊爍,究竟是誰給的底氣

      不顧央視警告頂風(fēng)作案,與劉濤傳出緋聞的楊爍,究竟是誰給的底氣

      芳芳?xì)v史燴
      2025-09-24 20:13:19
      “跳梁小丑”李玉剛跌下神壇,不再被大家寬容,梅葆玖:永不原諒

      “跳梁小丑”李玉剛跌下神壇,不再被大家寬容,梅葆玖:永不原諒

      詩意世界
      2025-08-13 16:24:00
      蘋果喊話iPhone13和14用戶換新機(jī):不如現(xiàn)在就17

      蘋果喊話iPhone13和14用戶換新機(jī):不如現(xiàn)在就17

      界面新聞
      2025-11-07 10:32:20
      亞太最大戰(zhàn)艦終入列!福建艦電磁彈射震撼全球,美日90年海軍霸權(quán)被打破

      亞太最大戰(zhàn)艦終入列!福建艦電磁彈射震撼全球,美日90年海軍霸權(quán)被打破

      Hi秒懂科普
      2025-11-05 17:07:13
      創(chuàng)隊(duì)史記錄!杰倫-格林太陽首秀轟進(jìn)6記三分球

      創(chuàng)隊(duì)史記錄!杰倫-格林太陽首秀轟進(jìn)6記三分球

      北青網(wǎng)-北京青年報(bào)
      2025-11-07 19:27:03
      鄭麗文今就任黨主席,國民黨財(cái)報(bào)曝光,負(fù)債總額逾21億新臺(tái)幣

      鄭麗文今就任黨主席,國民黨財(cái)報(bào)曝光,負(fù)債總額逾21億新臺(tái)幣

      海峽導(dǎo)報(bào)社
      2025-11-01 10:43:07
      雷軍都惹不起的女人!小米法務(wù)部徹底沒轍了!

      雷軍都惹不起的女人!小米法務(wù)部徹底沒轍了!

      廣告案例精選
      2025-11-06 16:54:01
      渴了就喝一口!  約基奇33分15籃板16助攻砍下本賽季第5次三雙

      渴了就喝一口! 約基奇33分15籃板16助攻砍下本賽季第5次三雙

      大眼瞄世界
      2025-11-06 23:16:58
      拿咱們當(dāng)傻子

      拿咱們當(dāng)傻子

      生活魔術(shù)專家
      2025-11-06 13:10:54
      今夜,大跳水!美聯(lián)儲(chǔ),降息大消息!

      今夜,大跳水!美聯(lián)儲(chǔ),降息大消息!

      中國基金報(bào)
      2025-11-07 00:15:38
      福建艦官宣入列!美方集體懵圈,一點(diǎn)消息沒收到,中方喊話有深意

      福建艦官宣入列!美方集體懵圈,一點(diǎn)消息沒收到,中方喊話有深意

      小濤叨叨
      2025-11-07 15:44:03
      2025-11-07 22:36:49
      程序員古耕 incentive-icons
      程序員古耕
      程序員、網(wǎng)文作家、自媒體人
      590文章數(shù) 382關(guān)注度
      往期回顧 全部

      科技要聞

      75%贊成!特斯拉股東同意馬斯克天價(jià)薪酬

      頭條要聞

      美媒:盧拉乘中國電動(dòng)汽車抵達(dá)峰會(huì)會(huì)場

      頭條要聞

      美媒:盧拉乘中國電動(dòng)汽車抵達(dá)峰會(huì)會(huì)場

      體育要聞

      是天才更是強(qiáng)者,18歲的全紅嬋邁過三道坎

      娛樂要聞

      王家衛(wèi)的“看人下菜碟”?

      財(cái)經(jīng)要聞

      荷蘭政府:安世中國將很快恢復(fù)芯片供應(yīng)

      汽車要聞

      美式豪華就是舒適省心 林肯航海家場地試駕

      態(tài)度原創(chuàng)

      親子
      教育
      本地
      健康
      游戲

      親子要聞

      可能你的玩具正在發(fā)霉

      教育要聞

      孩子成績沒啥動(dòng)靜,家長錢包掉得真快

      本地新聞

      這屆干飯人,已經(jīng)把博物館吃成了食堂

      超聲探頭會(huì)加重受傷情況嗎?

      《GTA6》跳票震動(dòng)業(yè)界 微軟這些大作或受影響

      無障礙瀏覽 進(jìn)入關(guān)懷版 主站蜘蛛池模板: 蒲城县| 国产精品一二三中文字幕| 亚洲综合国产一区二区三区| 国产亚洲精品久久77777| 国产黄色精品一区二区三区| 国产久久热这里只有精品| 二区三区国产在线观看| 亚洲av成人在线一区| 久青草精品视频在线观看| 国产成人精品免费视频app软件| 久久综合香蕉国产蜜臀av| 亚洲护士一区二区三区| 丁香五月亚洲综合在线国内自拍| 人妻加勒比系列无码专区| 中文字幕av一区二区三区| 国产美女裸身网站免费观看视频| 欧美亚洲熟妇一区二区三区| 日韩中文字幕国产精品| 永清县| 久久精品国产九一九九九| 精品中文人妻中文字幕| 精品国产一区二区三区大| 中文字幕人妻中出制服诱惑| 亚洲精品一区二区三天美| 爆乳女仆高潮在线观看| 亚洲AV无码秘?蜜桃蘑菇| 美女禁区a级全片免费观看| 中文字幕无码中文字幕有码a| 深夜精品免费在线观看| 98精品全国免费观看视频| 国产色悠悠综合在线观看| 日本欧美大码a在线观看| 18禁网站免费无遮挡无码中文| 国产午夜福利免费入口| 综合激情网一区二区三区| 中文字幕制服国产精品| 丁香五月亚洲综合在线| 动漫AV纯肉无码AV电影网| 国产精品不卡一区二区视频| 国产精品无码无在线观看| 人妻少妇偷人作爱av|