旺仔小糖

worker a year ago

go
并发
656个字符
共有115人围观
package main

import "log"

type Worker struct {
	in   chan int
	done chan bool
}

func main() {
	var workers [10]Worker

	for i := 0; i < 10; i++ {
		workers[i] = createWorker(i)
	}

	for i, w := range workers {
		w.in <- 'a' + i
	}

	for j, w := range workers {
		w.in <- 'A' + j
	}

	for _, w := range workers {
		<-w.done
		<-w.done
	}
}

func doWork(id int, worker Worker) {
	for c := range worker.in {
		log.Printf("worker %d received %c\n", id, c)
		go func() {
			worker.done <- true
		}()
	}
}

func createWorker(n int) Worker {
	w := Worker{
		in:   make(chan int),
		done: make(chan bool),
	}
	go doWork(n, w)
	return w
}

运行3次: