」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼我的 Goroutine 的值對其他人不可見?

為什麼我的 Goroutine 的值對其他人不可見?

發佈於2024-12-21
瀏覽:297

Why Is My Goroutine\'s Value Not Visible to Others?

這是因為go編譯器優化了程式碼嗎?

問題不是Go編譯器最佳化,而是缺乏同步。對 i 的賦值後面沒有任何同步事件,因此不能保證任何其他 goroutine 都會觀察到它。事實上,激進的編譯器可能會刪除整個 i 語句。

Go 記憶體模型

Go 記憶體模型指定在一個變數中讀取變數的條件可以保證goroutine 觀察到在不同goroutine 中寫入同一變數所產生的值。

要串行化訪問,請使用通道操作或其他同步原語(例如在sync 和sync/atomic包。 &&&]在下面的例子中,對a的賦值後面沒有任何同步事件,所以不保證能被觀察到由任何其他goroutine 執行。語句。 函數你好(){ go func() { a = "你好" }() 列印(一) }

以下範例示範如何使用sync.Mutex.

package main 序列化對 i 的訪問 進口 ( “同步” “時間” ) 函數主() { mx := new(sync.Mutex) 我:= 1 去函數(){ 為了 { mx.Lock() 我 mx.Unlock() } }()

最新教學 更多>
  • 如何透過命令列運行某個目錄下的所有Go檔案?
    如何透過命令列運行某個目錄下的所有Go檔案?
    使用命令列運行目錄中的所有Go 文件作為Go 的初學者,在處理多個文件時可能會遇到挑戰在你的包裹裡。雖然執行主文件的傳統方法(例如 go run main.go)可能不夠,但有一個更有效的解決方案。 要從命令列執行目錄中的所有 Go 文件,您可以只需使用命令 go run .. 該命令利用了一項特殊...
    程式設計 發佈於2024-12-22
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSocke...
    程式設計 發佈於2024-12-22
  • 如何從 SQLite 中的 DATETIME 欄位中提取月份?
    如何從 SQLite 中的 DATETIME 欄位中提取月份?
    從 SQLite 的 DATETIME 檢索月份從 SQLite 的 DATETIME 欄位中提取月份時遇到了困難。雖然 Month(dateField) 和 strftime('%m', dateStart) 等方法被證明無效,但這裡有一個解決方案可以幫助您成功檢索月份。 根據您的...
    程式設計 發佈於2024-12-22
  • 使用 `mysql_real_escape_string()` 和 `mysql_escape_string()` 足以保護您的應用程式嗎?
    使用 `mysql_real_escape_string()` 和 `mysql_escape_string()` 足以保護您的應用程式嗎?
    mysql_real_escape_string() 和 mysql_escape_string() 足以確保應用程式安全嗎? 雖然這些函數可以提供一些針對 SQL 注入和其他攻擊的保護,但他們未能解決某些漏洞。 SQL如果您在查詢中不正確地處理 PHP 變量,注入Mysql_real_escape...
    程式設計 發佈於2024-12-22
  • HTML 格式標籤
    HTML 格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2024-12-22
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-12-22
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-12-22
  • MySQL 的 Profiler 是用於資料庫效能分析的 SQL Server Profiler 的可行替代方案嗎?
    MySQL 的 Profiler 是用於資料庫效能分析的 SQL Server Profiler 的可行替代方案嗎?
    探索MySQL Profiler 及其功能SQL Server Profiler 已被證明對於開發人員、測試人員和資料庫應用程式除錯人員具有無價的價值。其圖形使用者介面和強大的追蹤功能使其成為首選工具。但是依賴 MySQL 資料庫的使用者怎麼辦?是否有一個等效的解決方案可以提供相同的多功能性和洞察力...
    程式設計 發佈於2024-12-22
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-12-22
  • 如何在 Java 中安全地解析以逗號作為小數分隔符號的雙精度數?
    如何在 Java 中安全地解析以逗號作為小數分隔符號的雙精度數?
    如何有效解析以逗號為小數分隔符號的雙精度型問題: ]字串值使用逗號作為分隔符號表示十進位數字,例如“1,234”,在使用解析時可能會導致NumberFormatException Double.valueOf().建議的解決方案:建議的解決方案:使用p = p.replaceAll(",&...
    程式設計 發佈於2024-12-22
  • 如何將 PHP 陣列轉換為 JavaScript 陣列?
    如何將 PHP 陣列轉換為 JavaScript 陣列?
    將 PHP 陣列轉換為 JavaScript使用 PHP 和 JavaScript 時,在它們之間交換資料至關重要。一項常見任務是將 PHP 陣列轉換為 JavaScript 陣列。本文將深入探討實現這種轉換的過程。 問題:給定一個PHP 數組,如何將其轉換為特定格式的JavaScript 數組?解...
    程式設計 發佈於2024-12-22
  • 如何在 MPI 中有效發送和接收二維數組?
    如何在 MPI 中有效發送和接收二維數組?
    使用MPI 發送和接收2D 數組使用MPI 發送和接收2D 數組問題:您有一個大型2D 矩陣,需要跨多個處理使用MPI 的節點。節點之間唯一的通訊涉及在每個時間步後共享邊緣值。 方法:// (assume A is a 2D array) if (myrank == 0) { for (i = ...
    程式設計 發佈於2024-12-22
  • 如何在 CSS 媒體查詢中使用「OR」邏輯組合多個條件?
    如何在 CSS 媒體查詢中使用「OR」邏輯組合多個條件?
    使用OR 邏輯組合CSS 媒體查詢中的多個條件在CSS 媒體查詢中,使用「OR」邏輯指定多個條件可能很有用用於定位具有不同螢幕尺寸或方面的裝置。雖然問題中提供的程式碼不正確,但有一個簡單的方法可以實現所需的結果。 要使用「OR」邏輯指定多個條件,請用逗號分隔:@media screen and (m...
    程式設計 發佈於2024-12-21
  • 為什麼我的 Go 程式碼中出現「已匯入但未使用」錯誤?
    為什麼我的 Go 程式碼中出現「已匯入但未使用」錯誤?
    Go 中錯誤:「已匯入且未使用」Go 中匯入套件時,出現「已匯入且未使用」錯誤如果匯入的包未在目前文件中使用。 在您的情況下,您匯入了「./api」套件。編譯器偵測到您尚未在程式碼中使用此套件。要解決此錯誤,您需要實際利用套件中的某些內容。 您已經提到您在main 函數中使用api 包,但您的程式碼...
    程式設計 發佈於2024-12-21
  • 如何在 Python 列表推導式中使用 if/else 邏輯?
    如何在 Python 列表推導式中使用 if/else 邏輯?
    使用if/else 進行列表推導式:語法與用法在Python 中使用清單推導式時,會遇到合併if /else 邏輯的情況處理條件操作。本文介紹了此類場景的正確語法。 一個常見任務是根據來源序列建立一個列表,並使用以下包含 if/else 結構的 for 迴圈:results = [] for x i...
    程式設計 發佈於2024-12-21

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3