谈谈go语言编程的并发安全

YanyiWu ·
我对这个问题有点疑问: seaweedfs这段代码只是对一个string成员重新赋值,个人觉得不会导致并发不安全的问题。 因为go中string是imutable的,并不会出现“只修改其中一部分字符”的问题,所以一个协程拿到这个string之后,是看不到其他协程修改的。 也就是说,如果一个协程修改了volumeserver的这个masterNode成员,那已经拿到之前masterNode的协程,看到的还是原来的masterNode。 map当然另当别论。
#2
更多评论
这个问题最好具体情况具体分析, 一些简单的单写多读操作,比如统计类代码或者一些读写操作可原子化的代码,是不需要加锁的。 对于一些复杂的读写操作,比如list hash类容器,肯定是需要加锁,如果性能要求高,可以采用一些lock_free算法。 java里面有 Concurrent库,采用了一些成熟的lock free算法,比如 ConcurrentHashMap。等
#1