是否可以在不触发竞争条件的情况下检查是否已设置字段?

时间:2020-02-13 08:53:07

标签: go concurrency

我有一个在许多goroutine中共享的结构,如果可能的话,我想减少计算该结构上一个字段的次数。可能更容易显示:

  chart: {
    events: {
      click: function() {
                console.log(this.hoverPoint)
      }
    }
  },

有没有安全的方法来完成此任务?这几乎就像我想要一个竞争条件,在这里我不介意它是否被多次写入,但是这样做的第一个线程应该防止随后的读取。一般而言,并发是新事物。

1 个答案:

答案 0 :(得分:1)

在您的方法中,必须首先锁定,然后才能检查是否已设置IFS=":" read A B <<< $(echo ONE:TWO) echo "$A" ONE TWO 。例如:

Items

但是sync.Once提供了更好,更快的选择。隐藏func (container *Container) loadContainer() { container.mu.Lock() defer container.mu.Unlock() if container.Items != nil { return } container.Items = loadItems() } 字段也很明智,这样就不会意外引用它。导出的函数应负责初始化,并返回仅初始化一次的值:

Items