Skip to content

Instantly share code, notes, and snippets.

@zfogg
Created December 21, 2013 07:56
Show Gist options
  • Save zfogg/8066695 to your computer and use it in GitHub Desktop.
Save zfogg/8066695 to your computer and use it in GitHub Desktop.
Microthreads in Go
package main
import ("flag"; "fmt")
var ngoroutine = flag.Int("n", 100000, "how many")
func f(left, right chan int) { left <- 1 + <-right }
func main() {
flag.Parse();
leftmost := make(chan int);
var left, right chan int = nil, leftmost;
for i:= 0; i< *ngoroutine; i++ {
left, right = right, make(chan int);
go f(left, right);
}
right <- 0; // bang!
x := <-leftmost; // wait for completion
fmt.Println(x); // 100000
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment