首页 > 解决方案 > 可以使用切片作为共享内存吗?

问题描述

在这样的结构中使用切片是否可以:

type buffer struct {
    values []int
    mutex sync.RWMutex
}

我问是因为当我们追加到切片时,我们有可能将切片复制到内存中的新位置。

标签: goconcurrencyshared-memory

解决方案


在大多数 Go 编程中,人们会在没有性能问题的情况下分配切片,以防万一append返回新内存,因为切片是参考值。

b.values = append(b.values, i)

type buffer struct {
    values []int
    mutex sync.RWMutex
}

func (b *buffer) Append(i int) {
    b.mutex.Lock()
    b.values = append(b.values, i)
    b.mutex.Unlock()
}

推荐阅读