关于协程方便的数据同步问题
来源:13-5 使用RWMutex锁同步协程

邱晨100
2021-05-02
老师好,以前跟着您学到Python高级开发,当时讲过线程和进程为什么需要做数据同步,以及锁的作用。因为线程和进程都有单独的内核空间,且线程需要把变量拷贝到自己的线程栈上,因此产生了数据不一致的问题。
但是很奇怪协程为什么也有这样的问题啊?照说它们运行在一个系统级线程中,都是共享的相同的变量才对啊,又不存在把变量拷贝到自己的栈上
写回答
2回答
-
你能通过写代码来举例说明一下问题吗? 比如协程同步的问题?
072021-05-05 -
邱晨100
提问者
2021-05-04
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() {
defer wg.Done()
for i := 0; i < 100000; i++ {
lock.Lock()
total -= 1
lock.Unlock()
}
}
func main() {
wg.Add(2)
go add()
go sub()
wg.Wait()
fmt.Println(total)
}
00
相似问题