老师您好

来源:13-4 使用互斥锁同步协程

慕仰4468487

2020-11-21

在这里输入代码
func add() {
	defer wg.Done()
	for i := 0; i < 100000; i++ {
		//lock.Lock()
		total += 1
		//lock.Unlock()
	}
}

func sub() {
	defer wg.Done()
	for i := 0; i < 100000; i-- {
		//lock.Lock()
		total -= 1
		//lock.Unlock()
	}
}
func main() {
	wg.Add(1)
	go add()
	go sub()
	wg.Wait()
	fmt.Println(total)

}

我将ws.Add(1)的时候,sub函数如果是i++ 就会报 panic: sync: negative WaitGroup counter 这个错误,查了下也不是太理解。但是当我将sub改成i–就没有问题,这个不是已经违背了Add要和Done数量一致的原则么

写回答

1回答

bobby

2020-11-22

package main

import "sync"
import "fmt"

var wg sync.WaitGroup
var total int
func add() {
   defer wg.Done()
   for i := 0; i < 100000; i++ {
      //lock.Lock()
      total += 1
      //lock.Unlock()
   }
}

func sub() {
   defer wg.Done()
   for i := 0; i < 100000; i-- {
      //lock.Lock()
      total -= 1
      //lock.Unlock()
   }
}
func main() {
   wg.Add(1)
   go add()
   go sub()
   wg.Wait()
   fmt.Println(total)

}

//img1.sycdn.imooc.com/szimg/5fb9d13c090e02e408230781.jpg

这是我这里的运行情况 没有报错啊

0
4
bobby
回复
慕仰4468487
你重新贴一下代码 我这里测试一下,回复中不能添加图片 你可以重新在当前问题下 新添加一个回复 不要在我下面回复我
2020-11-26
共4条回复

Go+Python打造电商系统 自研微服务框架 抓紧高薪机遇

快速转型Go工程师,成为具备双语言后端能力的开发者

508 学习 · 530 问题

查看课程