sync.Map

Posted by 夏泽民

普通的map是不支持并发的,换而言之,不是线程(goroutine)安全的。golang 1.4开始的map的并发读是没有支持,但是并发写会出现脏数据。golang 1.6之后,并发地读写会直接panic: fatal error: concurrent map read and map write package main func main() { m := make(map[int]int) go func() { for { _ = m[1] } }() go func() { for { m[2] = 2 } }() select {} } 所以需要支持对map的并发读写时候,博主使用两种方法:



xargs

Posted by 夏泽民

xargs: echo: terminated by signal 13 注意xargs -i 后面没有管道 | ,否则报错



rwmutex

Posted by 夏泽民

在某个数据需要被多个线程共享访问的时候,会出现读者-写者问题(这里的「问题」是复数形式的,因为读者-写者问题有多个变种)。访问共享数据的线程有两种类型:读者和写者。读者只会读取数据,而写者则是修改它。当写者拥有了访问数据的权限后,其它的线程(不管是读者还是写者)都不能访问这个数据。这种约束的需求在现实中是存在的,比如:当写者不能原子性地修改某个数据(例如数据库)时,在修改完成之前,要读取这个数据的读者要被阻塞,以免读者获取到损坏的数据(脏数据)。 代码实现 注意作者编写本文时分析的代码版本(718d6c58)与最新的版本相比可能会有差异。



onece

Posted by 夏泽民

sync.once可以控制函数只能被调用一次,不能多次重复调用。



mutex

Posted by 夏泽民

package sync_code



Search

Popular posts

Anything in here will be replaced on browsers that support the canvas element

Recent posts

This blog is maintained by 夏泽民

Get in touch with me at 465474307@qq.com

Subscribe to our mailing list

* indicates required