采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师好,以前跟着您学到Python高级开发,当时讲过线程和进程为什么需要做数据同步,以及锁的作用。因为线程和进程都有单独的内核空间,且线程需要把变量拷贝到自己的线程栈上,因此产生了数据不一致的问题。 但是很奇怪协程为什么也有这样的问题啊?照说它们运行在一个系统级线程中,都是共享的相同的变量才对啊,又不存在把变量拷贝到自己的栈上
你能通过写代码来举例说明一下问题吗? 比如协程同步的问题?
我写过了,就跟着您课堂上的代码,发现和多线程一样,多个协程共同操作一个数值最后导致不上嘴后想要的结果
你把代码贴一下把
下面有哈,加了锁之后的确解决问题了。其实我知道多线程之间也是这样解决线程同步的问题的。我的疑惑是,协程都是在一个线程栈上,理应用的一个栈上变量啊,这样照说不会出现互相吧对象修改的值覆盖的问题啊
package main
import (
"fmt"
"sync"
)
var total int
var wg sync.WaitGroup
var lock sync.Mutex
//互斥锁 读写锁 数据同步 能不用锁就不用锁
func add() {
defer wg.Done()
for i := 0; i < 100000; i++ {
lock.Lock()
total += 1
lock.Unlock()
}
func sub() {
total -= 1
func main() {
wg.Add(2)
go add()
go sub()
wg.Wait()
fmt.Println(total)
登录后可查看更多问答,登录/注册
快速转型Go工程师,成为具备双语言后端能力的开发者
944 1
1.2k 1
1.8k 20
1.3k 11
1.3k 10
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号