// Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Compute Fibonacci numbers with two goroutines // that pass integers back and forth. No actual // concurrency, just threads and synchronization // and foreign code on multiple pthreads. package main import ( "runtime" "stdio" "strconv" ) func fibber(c, out chan int64, i int64) { // Keep the fibbers in dedicated operating system // threads, so that this program tests coordination // between pthreads and not just goroutines. runtime.LockOSThread() if i == 0 { c <- i } for { j := <-c stdio.Puts(strconv.Itoa64(j)) out <- j <-out i += j c <- i } } func main() { c := make(chan int64) out := make(chan int64) go fibber(c, out, 0) go fibber(c, out, 1) <-out for i := 0; i < 90; i++ { out <- 1 <-out } }