🌞

两个协程交替打印1-100内的奇数偶数

两个线程交替打印 1-100 的奇数和偶数,这是Java中的一道经典面试题。不过本文给出的是Go中的实现方式。

得益于goroutine的存在,代码实现非常简单。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package main

import (
    "fmt"
)

func main() {
    c := make(chan int)
    q := make(chan bool)
    go func() {
        for i := 1; i <= 100; i++ {
            c <- i
            if i%2 == 1 {
                fmt.Printf("goroutine odd: %v\n", i)
            }
        }
    }()
    go func() {
        for i := 1; i <= 100; i++ {
            <-c
            if i%2 == 0 {
                fmt.Printf("goroutine even: %v\n", i)
            }
        }
        q <- true
    }()
    <-q
}
updatedupdated2020-01-122020-01-12
加载评论