1. 首页
  2. 文章

去哪儿面试题 (Golang实现)多线程顺序输出1-75

FredricZhu ·
package main
import (
 "fmt"
 "sync"
 "time"
)
var waiter sync.WaitGroup
func print5(i int) {
 j := i
 for j < i+5 {
 fmt.Println(j)
 j++
 }
 waiter.Done()
}
func main() {
 fmt.Println("Start print 75")
 waiter = sync.WaitGroup{}
 waiter.Add(15)
 for i := 1; i < 75; i += 5 {
 go print5(i)
 time.Sleep(1 * time.Nanosecond)
 }
 waiter.Wait()
 fmt.Println("End print 75")
}

程序输出如下,


image.png

本文来自:简书

感谢作者:FredricZhu

查看原文:去哪儿面试题 (Golang实现)多线程顺序输出1-75

这道题感觉就是傻逼题目,go 协程 刻意就是没有顺序的,在怎么控制,效率都没高多少,用加锁的形式输出,还不如主线程速度快,控制顺序 逃不了 要抢锁别无他法
#9
更多评论
``` var a struct { Mu sync.RWMutex Count int } var wg sync.WaitGroup func main() { wg = sync.WaitGroup{} wg.Add(75) for i:=1; i&lt;=75; i++ { go Add() } wg.Wait() } func Add() { defer wg.Done() a.Mu.Lock() a.Count++ fmt.Println(a.Count) a.Mu.Unlock() } ```
#1
输出结果不稳定,也就是说结果不对
#2

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中