github.com/neilgarb/delve@v1.9.2-nobreaks/_fixtures/databpeasy.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"runtime"
     6  	"sync"
     7  	"time"
     8  )
     9  
    10  var globalvar1 = 0
    11  var globalvar2 = 0
    12  
    13  func main() { // Position 0
    14  	runtime.LockOSThread()
    15  	globalvar2 = 1
    16  	fmt.Printf("%d %d\n", globalvar1, globalvar2)
    17  	globalvar2 = globalvar1 + 1
    18  	globalvar1 = globalvar2 + 1
    19  	fmt.Printf("%d %d\n", globalvar1, globalvar2) // Position 1
    20  
    21  	globalvar2 = globalvar2 + 1          // Position 2
    22  	globalvar2 = globalvar1 + globalvar2 // Position 3
    23  	fmt.Printf("%d %d\n", globalvar1, globalvar2)
    24  	globalvar1 = globalvar2 + 1
    25  	fmt.Printf("%d %d\n", globalvar1, globalvar2)
    26  
    27  	done := make(chan struct{}) // Position 4
    28  	var wg sync.WaitGroup
    29  	for i := 0; i < 20; i++ {
    30  		wg.Add(1)
    31  		go waitfunc(i, &wg)
    32  	}
    33  	wg.Wait()
    34  	go f(done)
    35  	<-done
    36  }
    37  
    38  func f(done chan struct{}) {
    39  	runtime.LockOSThread()
    40  	globalvar1 = globalvar2 + 2
    41  	close(done) // Position 5
    42  }
    43  
    44  func waitfunc(i int, wg *sync.WaitGroup) {
    45  	runtime.LockOSThread()
    46  	wg.Done()
    47  	time.Sleep(50 * time.Second)
    48  }