目次
正解
ホームページ バックエンド開発 Golang 最後にスリープしないと出力が表示されないのはなぜですか?

最後にスリープしないと出力が表示されないのはなぜですか?

Feb 06, 2024 am 11:21 AM
overflow

最後にスリープしないと出力が表示されないのはなぜですか?

質問の内容

次のコードは、リンク リスト内の要素を交互に出力する 2 つのゴルーチンの使用を実装しています。ただし、最終時刻が表示されないと印刷結果が表示されないという、かなり奇妙な問題に悩まされています。寝る。理論的には、標準出力にはバッファがありません。誰かがガイダンスを提供できますか?

import (
    "context"
    "fmt"
    "sync"
)

type ListNode struct {
    val  int
    next *ListNode
}

func NewLinkedList() (head *ListNode) {
    var cur *ListNode
    for i := 0; i < 100; i++ {
        if cur == nil {
            cur = &ListNode{val: i}
            head = cur
        } else {
            cur.next = &ListNode{val: i}
            cur = cur.next
        }
    }
    return
}

func main() {
    ll := NewLinkedList()
    wg := sync.WaitGroup{}
    var a = make(chan *ListNode, 1)
    var b = make(chan *ListNode, 1)
    ctx, cancel := context.WithCancel(context.Background())
    worker := func(name string, input, output chan *ListNode) {
        wg.Add(1)
        defer wg.Done()
        for {
            select {
            case n := <-input:
                if n == nil {
                    break
                }
                fmt.Printf("%s: %d\n", name, n.val)
                if n.next != nil {
                    output <- n.next
                } else {
                    cancel()
                    break
                }
            case <-ctx.Done():
                break
            }
        }
    }

    go worker("a", a, b)
    go worker("b", b, a)

    a <- ll
    wg.Wait()
    //time.Sleep(time.Millisecond)
}
ログイン後にコピー

正解

2つのGoroutineが開始される前にwaitgroupカウンターがインクリメントされるため、メインGoroutineでwg.Add(1)を呼び出す必要がありますmain( ) wg.Wait() に到達することは有効なシナリオです。カウンタが 0 の場合、wg.Wait() はブロックせず、main() が戻り、したがってアプリケーション全体が終了します:

wg.Add(1)
go worker("a", a, b)
wg.Add(1)
go worker("a", a, b)
ログイン後にコピー

(もちろん、 wg.Add(1) をスタッフから削除するところから始まります。)

参照: wg.Add() を配置する場所

###

以上が最後にスリープしないと出力が表示されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

2009 年から 2025 年の誕生以来のビットコインの価格 BTC 過去の価格の最も完全な概要 2009 年から 2025 年の誕生以来のビットコインの価格 BTC 過去の価格の最も完全な概要 Jan 15, 2025 pm 08:11 PM

2009 年の誕生以来、ビットコインは暗号通貨の世界のリーダーとなり、その価格は大きな変動を経験しました。包括的な歴史的概要を提供するために、この記事では 2009 年から 2025 年までのビットコイン価格データをまとめ、主要な市場イベント、市場センチメントの変化、価格変動に影響を与える重要な要因を取り上げます。

ビットコインの誕生以来の歴史的な価格の概要。ビットコインの歴史的な価格動向を完全にまとめています。 ビットコインの誕生以来の歴史的な価格の概要。ビットコインの歴史的な価格動向を完全にまとめています。 Jan 15, 2025 pm 08:14 PM

暗号通貨としてのビットコインは、その誕生以来、市場の大きな変動を経験してきました。この記事では、読者がビットコインの価格傾向と重要な瞬間を理解できるように、誕生以来のビットコインの歴史的な価格の概要を提供します。ビットコインの過去の価格データを分析することで、その価値に対する市場の評価やその変動に影響を与える要因を理解し、将来の投資決定の基礎を提供することができます。

ビットコインBTC歴史的価格動向チャートの誕生以来の歴史的価格のリスト(最新の要約) ビットコインBTC歴史的価格動向チャートの誕生以来の歴史的価格のリスト(最新の要約) Feb 11, 2025 pm 11:36 PM

2009年の作成以来、ビットコインの価格はいくつかの大きな変動を経験し、2021年11月に69,044.77ドルに上昇し、2018年12月に3,191.22ドルに減少しました。 2024年12月の時点で、最新の価格は100,204ドルを超えています。

2018-2024 USDのビットコインの最新価格 2018-2024 USDのビットコインの最新価格 Feb 15, 2025 pm 07:12 PM

リアルタイムのビットコインUSD価格 ビットコインの価格に影響を与える要因 将来のビットコイン価格を予測するための指標 2018年から2024年のビットコインの価格に関する重要な情報を次に示します。

ビットコインの誕生以来の歴史的価格の詳細の最も完全な要約(2025年の最新バージョン) ビットコインの誕生以来の歴史的価格の詳細の最も完全な要約(2025年の最新バージョン) Feb 15, 2025 pm 06:45 PM

ビットコインの重要なノード履歴価格2009年1月3日:ジェネシスブロックが生成され、最初のビットコインが生成され、値0の値が生成されました。 10月5日:最初のビットコイントランザクション、プログラマーが10,000ドルのビットコインを備えた2つのピザを購入しました。これは0.008ドルに相当します。 2010年2月9日:Gox Moux Exchangeはオンラインになり、初期のビットコイン取引の主要なプラットフォームになりました。 5月22日:ビットコインは初めて1ドルを破ります。 7月17日:ビットコインプライスは0.008ドルに急落し、史上最低値に達しました。 2011年2月9日:ビットコインの価格は初めて10ドルを破ります。 4月10日:Mt。Go

ChatGpt時代には、技術的なQ&Aコミュニティは課題にどのように対応できますか? ChatGpt時代には、技術的なQ&Aコミュニティは課題にどのように対応できますか? Apr 01, 2025 pm 11:51 PM

ChatGpt時代のテクニカルQ&Aコミュニティ:SegmentFaultの対応戦略StackOverFlow ...

1つの記事で、次のことをご覧ください:仮想通貨基金レートとは何ですか? 1つの記事で、次のことをご覧ください:仮想通貨基金レートとは何ですか? Feb 15, 2025 pm 10:06 PM

仮想通貨の資金調達率は、デリバティブ取引でポジションを保持しているトレーダーに請求される手数料です。これは、契約の有効期限が切れたときのスポット市場価格と先物契約価格との間のプレミアムまたは割引を反映しています。スポット価格が先物価格よりも高い場合、資本金利はマイナスです。つまり、ショートポジションが長いポジションのトレーダーに手数料を支払うトレーダーは意味があります。それどころか、スポット価格が先物価格よりも低い場合、資本金利はプラスです。つまり、長いポジションを行うトレーダーは、ショートポジションを行うトレーダーに料金を支払うことです。

2025年の最も有望な仮想通貨の分析2025年のトップ10の潜在的な仮想通貨在庫 2025年の最も有望な仮想通貨の分析2025年のトップ10の潜在的な仮想通貨在庫 Feb 15, 2025 pm 05:51 PM

仮想通貨市場は常に進化しており、今後数年間でエキサイティングな成長が期待されています。 2025年には、一部の暗号通貨が際立っており、このスペースへの最も有望な投資になると予想されています。この記事では、2025年に最も有望な仮想通貨のいくつかを分析し、将来に影響を与える独自の能力、成長の可能性、可能性をカバーしています。これらの通貨には、イーサリアム、ビットコイン、カルダノ、ポルカドット、ビナンスコインが含まれます。これらは、分散型ファイナンス、スマートコントラクト、ブロックチェーンテクノロジーの開発に重要な役割を果たします。これらの仮想通貨の可能性を理解すると、投資家は2025年に仮想通貨市場がもたらす機会をつかむ準備ができています。

See all articles