初级会员
  • 第 42833 位会员
  • anko
  • 2019-09-14 05:24:23
  • Offline
  • 21 30

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • #41 @xxxcat 其实,锁分为2种,一种锁属性,一种锁对象,sync.map的那种就是将各个方法的执行强制限制为单个线程,而expvar.Map则是将这个对象的访问和修改统一限制为单个线程,sync.map锁住的是对象下的独立的每个方法,而expvar.Map锁住的是这个对象,自然就是比sync.map的锁粒度要大点!
  • #39 @saberlong 所以,我个人觉得,就是不能说sync.map这个对象是线程安全的!应该说这个对象下的所有方法都是独立的线程安全的!但是他们组合在一起就不是线程安全的!不同的是,expvar.Map这个对象锁的粒度大点,他确实可以说是线程安全的!不关是组合这个对象下的所有方法,还是单个操作,都是线程安全的!这点跟sync.map是有挺大区别的!我确实在没发这个帖子之前我以为sync.map是类似于expvar.Map一样都是线程安全的,我没想到sync.map的锁粒度小点,只对单个的增删改查做了锁,但是当将增删改查混在一起写时候组合起来并不是线程安全的!所以感谢各位大佬了!学习中,让我们一起进步!
  • #39 @saberlong 大佬发话了,是的,我的代码是要实现线程安全,我要保证几个api是原子性发生,而不是保证单个api线程安全!
  • #36 @jarlyyn 非常感谢,让我学到许多东西,不过关于原子,锁以及锁的粒度我应该没表达错误,
  • #36 @jarlyyn 确实,官方说的很对,你说的也有道理,不过我们不冲突,我表达的是锁的粒度有大有小,而我的业务刚好既需要插入也需要更改,所以就不大适合这个sync.map,因为sync.map的粒度太小了,某些场合用它确实可以,如果经常需要修改的点,恐怕用这个sync.map就不适合了!