最後にスリープしないと出力が表示されないのはなぜですか?
次のコードは、リンク リスト内の要素を交互に出力する 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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック

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

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

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

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

ビットコインの重要なノード履歴価格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コミュニティ:SegmentFaultの対応戦略StackOverFlow ...

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

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