首页 > 其他 > 详细

跨包并发控制

时间:2021-08-05 22:31:58      阅读:22      评论:0      收藏:0      [点我收藏+]

文件目录结构

.
├── cmd
│   ├── go.mod
│   └── main.go
└── worker
    ├── go.mod
    └── worker.go

2 directories, 4 files

main.go 文件

package main

import (
	"context"
	"fmt"
	"sync"
	"time"
	"worker"
)

var wg sync.WaitGroup

func main() {
	ctx, cancel := context.WithCancel(context.Background())
	wg.Add(1)
	go worker.Worker(&wg, ctx)
	// go worker.Worker(ctx)
	time.Sleep(time.Second * 3)
	cancel() // 通知子goroutine结束
	wg.Wait()
	fmt.Println("over")
}

worker.go 文件

package worker

import (
	"context"
	"fmt"
	"sync"
	"time"
)

// var wg sync.WaitGroup

// func Worker(ctx context.Context) {
func Worker(wg *sync.WaitGroup, ctx context.Context) {
LOOP:
	for {
		fmt.Println("worker")
		time.Sleep(time.Second)
		select {
		case <-ctx.Done(): // 等待上级通知
			break LOOP
		default:
		}
	}
	wg.Done()
}

执行cmd/main.go

go run main.go  
worker
worker
worker
over

跨包并发控制

原文:https://www.cnblogs.com/liy36/p/15104397.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!