Skip to content

Instantly share code, notes, and snippets.

@netmarkjp
Last active December 23, 2015 14:24
Show Gist options
  • Select an option

  • Save netmarkjp/7bc8c2c24139638f5685 to your computer and use it in GitHub Desktop.

Select an option

Save netmarkjp/7bc8c2c24139638f5685 to your computer and use it in GitHub Desktop.

Revisions

  1. netmarkjp revised this gist Dec 23, 2015. 1 changed file with 6 additions and 2 deletions.
    8 changes: 6 additions & 2 deletions main.go
    Original file line number Diff line number Diff line change
    @@ -34,11 +34,15 @@ func main() {
    }
    for {
    if len(task) == 0 {
    taskquit <- true
    for i := 0; i < parallel; i++ {
    taskquit <- true
    }
    }
    time.Sleep(200 * time.Millisecond)
    }
    }()
    for i := 0; i < parallel; i++ {
    <-workerquit
    }

    <-workerquit
    }
  2. netmarkjp created this gist Dec 23, 2015.
    44 changes: 44 additions & 0 deletions main.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,44 @@
    package main

    import (
    "fmt"
    "time"
    )

    func main() {
    task := make(chan string)
    taskquit := make(chan bool)
    workerquit := make(chan bool)

    parallel := 3

    for i := 0; i < parallel; i++ {
    go func() {
    loop:
    for {
    select {
    case <-taskquit:
    workerquit <- true
    break loop
    case job := <-task:
    fmt.Println(job)
    time.Sleep(1 * time.Second)
    }
    }
    }()
    }

    go func() {
    for n := 0; n < 7; n++ {
    task <- fmt.Sprintf("お仕事%03d", n+1)
    }
    for {
    if len(task) == 0 {
    taskquit <- true
    }
    time.Sleep(200 * time.Millisecond)
    }
    }()

    <-workerquit
    }