zoukankan      html  css  js  c++  java
  • golang 内存模型

    1,是什么

    是一套规范、内存操作指导
    解决多线程编程的 程序的 原子性,有序性,可见性(主要)的问题。
    多核操作系统,会存在缓存不一致的情况,说到底是一个同步的问题.

    2, 内容

    内存模型,除了定义了一套规范,还提供了一系列原语,封装了底层实现后,供开发者直接使用。

    go 中:概括 (按照如下规范 使用 channel、sync 等进行同步)
    在单独的goroutine中先行发生的顺序即是程序中表达的顺序。

        如果包p引入(import)包q,那么q的init函数的结束先行发生于p的所有init函数开始main.main函数的开始发生在所有init函数结束之后  
    
        在channel的发送操作先行发生于对应的接收操作完成 
        对channel的关闭先行发生于接收到零值,因为channel已经被关闭了。 
        无缓冲channel的接收先行发生于发送完成 
        在容量为C的channel上的第k个接收先行发生于从这个channel上的第k+C次发送完成。 
        对任意的sync.Mutex或sync.RWMutex变量l和n < m,n次调用l.Unlock()先行发生于m次l.Lock()返回 
        对于sync.RWMutex变量l,任意的函数调用l.RLock满足第n次l.RLock后发生于第n次调用l.Unlock,对应的l.RUnlock先行发生于第n+1次调用l.Lock(此处luck、为写锁)。
        
        通过once.Do(f)执行f()先行发生(指f()返回)于其他的once.Do(f)返回。 
    

    2,参考链接

    建议阅读,有助于理解

    go: https://segmentfault.com/a/1190000008230146

    java :
    http://www.hollischuang.com/archives/2509
    https://juejin.im/post/5b42c01ee51d45194e0b819a

  • 相关阅读:
    团队会议第八天
    团队会议第七天
    站立会议第五天
    站立会议第四天
    站立会议第三天
    站立会议第二天
    站立会议第一天(2016.4.19)
    团队报告
    团队计划backlog
    每日Scrum(5)
  • 原文地址:https://www.cnblogs.com/mingbai/p/gomemorysync.html
Copyright © 2011-2022 走看看