Size: a a a

2020 December 06

ЕО

Евгений Омельченко... in Go-go!
Но само получение len это просто получение поля структуры, ничего тут не развалится. Просто смысла в нём нет, если вы паралелльно его меняете
источник

VS

Vyacheslav Sitnikov in Go-go!
Ну процедура лока не сильно быстрая, а мне, по сути, она нужна только для того, чтобы увеличить размер. Горутины могут увеличивать слайт ТОЛЬКО в большую сторону. Вот чтобы лишний раз не локать, хочу предварительно проверить, достаточно ли размера
источник

ЕО

Евгений Омельченко... in Go-go!
Вы len и cap не путаете случайно?
источник

VS

Vyacheslav Sitnikov in Go-go!
нет
источник

Z

Zver in Go-go!
Vyacheslav Sitnikov
Ну процедура лока не сильно быстрая, а мне, по сути, она нужна только для того, чтобы увеличить размер. Горутины могут увеличивать слайт ТОЛЬКО в большую сторону. Вот чтобы лишний раз не локать, хочу предварительно проверить, достаточно ли размера
Сделайте обёртку и добавьте там счётчик и работаете с ним через атомик. Но все равно вам Локи нужны чтобы писать читать.
источник

VS

Vyacheslav Sitnikov in Go-go!
Zver
Сделайте обёртку и добавьте там счётчик и работаете с ним через атомик. Но все равно вам Локи нужны чтобы писать читать.
Ну как вариант... Переменную всяко быстрее прочитать, чем len использовать. Спасибо за идею
источник

DP

Daniel Podolsky in Go-go!
Vyacheslav Sitnikov
Ну как вариант... Переменную всяко быстрее прочитать, чем len использовать. Спасибо за идею
Это вы почему так думаете?!

Len - это переменная и есть
источник

ЕО

Евгений Омельченко... in Go-go!
Vyacheslav Sitnikov
Ну как вариант... Переменную всяко быстрее прочитать, чем len использовать. Спасибо за идею
Я же говорил выше — длина это просто поле в структуре
источник

VS

Vyacheslav Sitnikov in Go-go!
Daniel Podolsky
Это вы почему так думаете?!

Len - это переменная и есть
Блин... И точно, ща глянул структуру, там указатель, len и cap
источник

ЕО

Евгений Омельченко... in Go-go!
 13 type slice struct {
14     array unsafe.Pointer
15     len   int
16     cap   int
17 }
источник

VS

Vyacheslav Sitnikov in Go-go!
окей, тогда вопрос прежний, кто знает нужно ли лочить на чтение, чтобы получить len ?
источник

Z

Zver in Go-go!
Vyacheslav Sitnikov
окей, тогда вопрос прежний, кто знает нужно ли лочить на чтение, чтобы получить len ?
Нужно.
источник

Z

Zver in Go-go!
type Entities struct {
entities []int
count    int64
mu       sync.Mutex
}

func (e *Entities) Count() int {
return int(atomic.LoadInt64(&(e.count)))
}

func (e *Entities) Add(entity int) {
e.mu.Lock()
e.entities = append(e.entities, entity)
atomic.AddInt64(&(e.count), 1)
e.mu.Unlock()
}
источник

VS

Vyacheslav Sitnikov in Go-go!
Zver
Нужно.
ок, спасибо
источник

ЕО

Евгений Омельченко... in Go-go!
Код не запаникует, если вы попробуете взять len
источник

Z

Zver in Go-go!
Vyacheslav Sitnikov
ок, спасибо
Все переменныые к которым могут обращаться параллельно, кроме случаем только чтения, нужно использовать синхронизацию.
источник

ЕО

Евгений Омельченко... in Go-go!
Евгений Омельченко
Код не запаникует, если вы попробуете взять len
Вы это хотели узнать?
источник

V

Vlad in Go-go!
Zver
type Entities struct {
entities []int
count    int64
mu       sync.Mutex
}

func (e *Entities) Count() int {
return int(atomic.LoadInt64(&(e.count)))
}

func (e *Entities) Add(entity int) {
e.mu.Lock()
e.entities = append(e.entities, entity)
atomic.AddInt64(&(e.count), 1)
e.mu.Unlock()
}
Анлок наверное лучше в дефере же?
источник

VS

Vyacheslav Sitnikov in Go-go!
Vlad
Анлок наверное лучше в дефере же?
defer - лишние накладные расходы
источник

LT

Lucky Tea in Go-go!
Vyacheslav Sitnikov
defer - лишние накладные расходы
скорее просто нет других return
источник