程式設計師遇到了乙個“奇怪”的程式碼問題,並終止了乙個條件為 20 的 for 迴圈,輸出為 21!

Mondo 科技 更新 2024-01-29

我們公司的一位程式設計師同事對我說:“我遇到了乙個非常奇怪的**!聽他這麼說有點緊張,我很好奇**什麼能叫“怪異”。 然後他跟我解釋,他寫了乙個for迴圈,然後用for迴圈的索引來得到陣列對應下標的值,但是這個**好像沒有效果,明明迴圈終止條件是設定i<=20,但最後發現i的值是21!我一聽到他描述這樣的事情,我立刻產生了興趣。

然後我拿他的**除錯了一下,發現真的和他描述的一樣,迴圈終止條件是i<=20,但是i的最後值是21!

*這個問題真的很奇怪,但我喜歡它!但是我看了一會兒他的***,有點不好意思,一時也不確定他的***寫有沒有問題!然而,唯一可以肯定的是,他在for迴圈中使用了非同步執行緒,我想問題仍然出線上程上。

所以,我寫了乙個完全模擬他的寫作風格的演示來測試我的想法。

我寫了乙個 0 到 20 的 for 迴圈,然後直接非同步輸出 i 的值,最後我發現這個 i 的值不僅輸出 21,甚至 21 個輸出輸出 i 的一半以上都有 21 的值!

想了一會兒,我想出了問題的原因!

出現此問題的原因是迴圈使用非同步輸出,在併發輸出的情況下,i 的輸出順序不確定,這也破壞了 i 值的原子性,最終可能導致 i 的值與輸出時的預期不同。

打個簡單的比方,因為for迴圈內部使用非同步輸出,所以for迴圈會在很短的時間內執行,而for迴圈執行完之後,就可能執行非同步邏輯了,這時i的值可能是20,所以如果非同步輸出的邏輯是在for迴圈結束後執行的, 那麼這個時候輸出的 i,那麼 i 的值應該是 20,所以,原則上會有大量的輸出 20 個值!

但是,我們也發現 i 的值並不是我們想象的那樣,它不是 20 而是 21,這就把我們帶到了 for 迴圈的執行邏輯。

假設 i 的起始值為 0,結束值為 20,則 for 迴圈的執行邏輯是每次進行迴圈時都會給出 i+1,當它準備進入下乙個迴圈時,會首先判斷 i 是否大於結束值, 如果它大於它,則不會執行。

換句話說,當執行最後乙個迴圈時,for 迴圈仍然給出 i+1,因此如果執行非同步輸出的邏輯,則 i 等於 21!

我們可以用乙個簡單的例子來證明這個推論(這裡沒有複雜的程式設計基礎知識,都是關於驗證的)。

我們可以在 for 迴圈之外定義乙個值為 0 的變數 i,即避免在 for 迴圈時建立變數,讓我們呼叫 for 迴圈之外的輸出,當 for 迴圈結束時(這裡沒有非同步操作),我們輸出 i 的值,你會發現 i 的值是 21 而不是 20!

我們都知道這個問題,但是如果我的同事必須在他的 for 迴圈中使用非同步怎麼辦?解決方法也很簡單,就是直接定義乙個變數來獲取每個迴圈中 i 的值,並且這個變數相對於 for 迴圈是原子的,然後,在非同步時間內使用這個變數而不是直接使用 i,就這樣,問題就解決了!

如何?你學會了嗎?

相關問題答案

    低程式碼程式設計模型會取代程式設計師嗎?

    在當今的數字時代,低質量的開發模式逐漸成為軟體開發領域的趨勢。Low 是一種通過圖形介面和視覺化建模簡化軟體開發過程的方法。它允許非程式設計師通過拖放元件和配置引數來快速構建應用程式。那麼,低 的流行是否意味著程式設計師的失業呢?首先,讓我們了解低 的概念。Low 是一種快速開發應用程式的方法,允許...

    程式設計師年輕嗎?老程式設計師不會被淘汰,只會枯萎!

    當我們談論程式設計師年齡對就業的影響時,現實遠比 青春大公尺 這句話複雜得多。年齡確實在職業選擇中起著重要作用,但這並不意味著程式設計師在 歲之後就會失去市場價值。這種觀點更像是程式設計師自己的玩笑和迎合大眾口味的宣傳。與應屆畢業生相比,我們資深程式設計師可能會面臨一些挑戰,但是我們的資深程式設計師...

    程式設計師除了上班之外如何賺錢?

    你是否認為,作為一名程式設計師,你的日常職責就是在 的海洋中游泳,為乙個功能而焦慮,為乙個專案熬夜?其實,除了努力,程式設計師還有很多賺錢的方法!接下來,讓我們來看看如何利用您的技術來分散您的收入 .兼職接單。. 平台訂單。國內程式碼市場有大量的開發需求,志成 竹八戒等,你可以根據自己的技能和經驗選...

    閱讀程式設計師的 README 說明 06 測試(上圖)。

    測試本身更有可能成為一項繁忙的任務。..糟糕的測試會增加開發人員的開銷,而不會提供價值,並且還會增加測試套件的不穩定性。..該測試可以檢查 是否正常工作。...測試本身可以驗證軟體的行為是否符合預期。...意外的軟體行為可能會給使用者 開發人員和操作員帶來很多困惑。...測試此過程可以證明 已按規定...

    透露!Python程式設計師薪資被人肉搜尋,國內城市高薪排名曝光!

    在這個數位化快速發展的時代,對python程式設計師的需求與日俱增。那麼,中國哪些城市python程式設計師的工資最高呢?本文將為您揭曉國內城市高薪排名,讓大家知道python程式設計師的真實收入!作為國內科技公司的聚集地,北京的Python程式設計師需求量巨大,平均月薪萬元。位元組跳動 快手等多家...