场景描述:
携程 test1 先读取A,然后写B,携程 test2 先读取B,然后写A
需保证要么执行test1,接着执行test2,或者先执行test2,后执行test1。该方式出了类似C语言方式加大锁,还有其他什么方式可以解决。
代码:
```
package main
import (
"sync"
"fmt"
"time"
)
var lock sync.Mutex
func test1() {
lock.Lock()
read A // 伪代码 简称 RA1
write B // 伪代码 简称 WB1
lock.Unlock()
}
func test2() {
lock.Lock()
read B // 伪代码 简称 RB2
write A // 伪代码 简称 WA2
lock.Unlock()
}
func main() {
go test1()
go test2()
for {}
}
```
上述代码可以保证执行顺序为:
RA1、WB1、RB2、WA2 或者 RB2、WA2、RA1、WB1
请问使用go有更优雅的方式解决携程之间的同步问题吗,感觉上述写法有点C的风格