Skip to content

Instantly share code, notes, and snippets.

@unanoc
Created November 17, 2018 18:28
Show Gist options
  • Save unanoc/9d01edd070af7ea8065930f7392ff3ff to your computer and use it in GitHub Desktop.
Save unanoc/9d01edd070af7ea8065930f7392ff3ff to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"os"
"os/signal"
"runtime"
"strings"
"sync"
"syscall"
"time"
"github.com/fatih/color"
)
const (
countWorker = 200
)
func worker(wg *sync.WaitGroup, workerNum int, done chan struct{}) {
defer wg.Done()
text := fmt.Sprintln(strings.Repeat("█", workerNum))
fmt.Println(color.BlueString(text))
for {
time.Sleep(800 * time.Millisecond)
select {
case <-done:
fmt.Println(color.RedString(text))
return
default:
fmt.Println(color.GreenString(text))
runtime.Gosched()
}
}
}
func main() {
stopChan := make(chan os.Signal, 1)
signal.Notify(stopChan, syscall.SIGINT, syscall.SIGTERM)
doneChanel := make(chan struct{})
wg := &sync.WaitGroup{}
for i := 0; i < countWorker; i++ {
wg.Add(1)
go worker(wg, i, doneChanel)
time.Sleep(100 * time.Millisecond)
}
go func() {
select {
case <-stopChan:
close(doneChanel)
}
}()
wg.Wait()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment