V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  ldimple  ›  全部回复第 2 页 / 共 2 页
回复总数  24
1  2  
2021-03-05 14:02:46 +08:00
回复了 ldimple 创建的主题 Go 编程语言 go 语言大佬请进,三协程按序打印 abc 到底哪里出错
@Shakeitin 您是对的,已解决
2021-03-05 13:07:34 +08:00
回复了 ldimple 创建的主题 Go 编程语言 go 语言大佬请进,三协程按序打印 abc 到底哪里出错
@LoNeFong 第一次发帖哈哈
2021-03-05 13:05:57 +08:00
回复了 ldimple 创建的主题 Go 编程语言 go 语言大佬请进,三协程按序打印 abc 到底哪里出错
@sealingpp 谢谢,我也会用管道,只是想试试这种无锁变量的方法
2021-03-05 12:39:01 +08:00
回复了 ldimple 创建的主题 Go 编程语言 go 语言大佬请进,三协程按序打印 abc 到底哪里出错
type cond struct{
sema1 int32
sema2 int32
}
func (c *cond)printA(){
for {
if c.sema1==0{
println("A")
atomic.CompareAndSwapInt32(&c.sema1,0,1)
}
}

}

func (c *cond)printB(){
for {
if c.sema1==1&& c.sema2==0{
println("B")
atomic.CompareAndSwapInt32(&c.sema2,0,1)
}
}
}


func (c *cond) printC(){
for {
if c.sema2==1 {
println("C")
println("--------------------------------")
atomic.CompareAndSwapInt32(&c.sema1, 1, 0)
atomic.CompareAndSwapInt32(&c.sema2, 1, 0)
}
}
}

func main() {
var con =new (cond)
con.sema1=0
con.sema2=0
go con.printC()
go con.printB()
go con.printA()
time.Sleep(5*time.Second)

}
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1094 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 10ms · UTC 22:37 · PVG 06:37 · LAX 14:37 · JFK 17:37
Developed with CodeLauncher
♥ Do have faith in what you're doing.