golang|問題コードレポートgo同時デッドロック

6272 ワード

文書ディレクトリ

  • バックグラウンド
  • コード
  • 背景


    老男の子の第5期のgoを学ぶことに従って、先生の設計は構造体を使うので、私はドラムを打って構造体を使わないことができますか.結果は多くの問題があった.記録をつける.実は主に分からないと思って、channelは引用タイプで、どうしてポインタのchannelタイプがありますか.var a = make(chan *int) var b = make(chan * bool)

    コード#コード#

    package main
    
    import (
    	"fmt"
    	"math/rand"
    	"sync"
    	"time"
    )
    
    var wg sync.WaitGroup
    var t1 = make(chan int, 200)
    var t2 = make(chan int, 200)
    
    func sc(a chan int) {
    	defer wg.Done()
    	for i := 0; i < 10; i++ {
    		a  rand.Int()
    		// fmt.Println("js inside:", a)
    		time.Sleep(time.Millisecond * 1000)
    	}
    }
    
    func js(ch1 chan int, ch2 chan int) {
    	defer wg.Done()
    	n := ch1
    	sum := 0
    	for n > 0 {
    		sum += n % 10
    		n = n / 10
    	}
    	ch2  sum
    }
    
    func main() {
    	wg.Add(2)
    	go sc(t1)
    	// wg.Add(24)
    	// for i := 0; i < 24; i++ {
    	// 	go js(t1, t2)
    	// }
    	go js(t1, t2)
    	wg.Wait()
    	for a := range t2 {
    		fmt.Println("outside:", a)
    		// for b := range t1 {
    		// 	fmt.Println("outside:", b, a)
    		// }
    	}
    }