Calvin Chou

Results 3 comments of Calvin Chou

### colobu 大师,你好 按照你这个文章, 我做了一个测试(代码贴在下面在了),有一些疑问: - 为何 `struct`在不加锁的情况下并发读写,有`WARNING: DATA RACE`,但是不挂呢? - 那我们在开发服务端程序的时候,要如何"最佳实践"结构体的并发控制呢? 附上 [Stack Overflow 提问链接](https://stackoverflow.com/q/51301328/1935813) **谢谢您了 :)** ```go package main import ( "sync" ) func main() { // concurrentMap()...

> @smallnest > 因为`metadata`即使是检测到有并发读写,但是这个`struct`本身并没有在“出现并发读写时候”做额外的处理(panic),所以concurrentStruct不会出错。 > > 与map对象相比,map类型会检测到, 比如 https://github.com/golang/go/blob/b080abf656feea5946922b2782bfeaa73cc317d4/src/runtime/map_fast64.go#L60,所以会panic。 > > > 如果你确定会有并发问题, 一般就使用`concurrentStructWithMuLock` > 如果想在 `Metadata `上加一个 **发现并发读写**的功能要怎么做呢?

> @smallnest > > 多种方式,你可以参考map的实现。 > > 或者设置一个 `var flag uint32`, 读写之前使用atomic CAS, 读写完重置为0。 如果CAS false则说明有其它goroutine正在读写它 感谢指点方向。 我晚上就试试。