1// Copyright 2009 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5//go:build ignore 6 7// Compute Fibonacci numbers with two goroutines 8// that pass integers back and forth. No actual 9// concurrency, just threads and synchronization 10// and foreign code on multiple pthreads. 11 12package main 13 14import ( 15 big "." 16 "runtime" 17) 18 19func fibber(c chan *big.Int, out chan string, n int64) { 20 // Keep the fibbers in dedicated operating system 21 // threads, so that this program tests coordination 22 // between pthreads and not just goroutines. 23 runtime.LockOSThread() 24 25 i := big.NewInt(n) 26 if n == 0 { 27 c <- i 28 } 29 for { 30 j := <-c 31 out <- j.String() 32 i.Add(i, j) 33 c <- i 34 } 35} 36 37func main() { 38 c := make(chan *big.Int) 39 out := make(chan string) 40 go fibber(c, out, 0) 41 go fibber(c, out, 1) 42 for i := 0; i < 200; i++ { 43 println(<-out) 44 } 45} 46