github.com/kidsbmilk/gofronted_all@v0.0.0-20220701224323-6479d5976c5d/libgo/misc/cgo/gmp/fib.go (about) 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 // +build ignore 7 8 // Compute Fibonacci numbers with two goroutines 9 // that pass integers back and forth. No actual 10 // concurrency, just threads and synchronization 11 // and foreign code on multiple pthreads. 12 13 package main 14 15 import ( 16 big "." 17 "runtime" 18 ) 19 20 func fibber(c chan *big.Int, out chan string, n int64) { 21 // Keep the fibbers in dedicated operating system 22 // threads, so that this program tests coordination 23 // between pthreads and not just goroutines. 24 runtime.LockOSThread() 25 26 i := big.NewInt(n) 27 if n == 0 { 28 c <- i 29 } 30 for { 31 j := <-c 32 out <- j.String() 33 i.Add(i, j) 34 c <- i 35 } 36 } 37 38 func main() { 39 c := make(chan *big.Int) 40 out := make(chan string) 41 go fibber(c, out, 0) 42 go fibber(c, out, 1) 43 for i := 0; i < 200; i++ { 44 println(<-out) 45 } 46 }