package main import ( "flag" "fmt" "sync" "time" ) func main() { names := Names{"Aristotle", "Kant", "Spinoza", "Marx", "Russell"} flag.Var(&names, "names", "philospher names") rounds := flag.Int("rounds", 3, "number of rounds") maxDelay := flag.Duration("max delay", 3*time.Second, "delay") timeOut := flag.Duration("timeout", time.Second, "delay") flag.Parse() forks := NewForks(len(names)) reports := make(chan string) wg := sync.WaitGroup{} for i, name := range names { wg.Add(1) p := &Philo{ Name: name, Left: forks[i], Right: forks[(i+1)%len(names)], Rounds: *rounds, MaxDelay: *maxDelay, TimeOut: *timeOut, Report: reports, } go func() { p.Dine() wg.Done() }() } go func() { wg.Wait() close(reports) }() for v := range reports { fmt.Println(v) } }