dongmisa4779 2018-03-10 21:28
浏览 8
已采纳

如何在内部锁定对所有结构域的并发访问?

How to lock concurrent access to all struct fields internally? Let's say I have a struct:

 type Data struct {
    ID string
    Size int
    //... and more fields
 }

That will be used in another struct:

type Project struct {
    mu sync.Mutex
    MetaData Data
    //... and more fields
}

How could I modify/get MetaData struct and use mutex for that while not exposing its mutex to the outer packages? I know I could use Get/Set methods, but what if I needed to modify one field of Data struct (it wouldn't be very good/clean if every field had a get/set method with the same shared mutex)? Could you recommend a way/pattern to have a struct-wise mutex that would be locked/unlocked internally?

  • 写回答

2条回答 默认 最新

  • doudun3910 2018-03-10 22:19
    关注

    How about something like this?

    type Data struct {
        ID   string
        Size int
        //... and more fields
    }
    
    type Project struct {
        mu       sync.Mutex
        metaData Data
        //... and more fields
    }
    
    func (p *Project) AccessMetaData(f func(*Data)) {
        p.mu.Lock()
        defer p.mu.Unlock()
        f(&p.metaData)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?
  • ¥15 讲解电路图,付费求解
  • ¥15 有偿请教计算电磁学的问题涉及到空间中时域UTD和FDTD算法结合的
  • ¥15 three.js添加后处理以后模型锯齿化严重