Sobes.tech
Назад к вопросам
Junior — Middle
89

Можешь ли ты назвать структуры данных без блокировок, которые ты знаешь?

Компании, где спрашивали
Evrone

Ответ от нейросети

sobes.tech AI

Структуры данных без блокировок (lock-free) — это структуры, которые обеспечивают корректную работу в многопоточной среде без использования мьютексов или других блокировок, что повышает производительность и снижает риск взаимных блокировок.

В Go можно выделить несколько примеров таких структур или подходов:

  • Atomic variables — использование пакета sync/atomic для атомарных операций с примитивными типами (int, uint, pointer). Например, атомарное увеличение счетчика.

  • Lock-free очереди — существуют реализации очередей, основанные на атомарных операциях CAS (Compare-And-Swap), например, Michael-Scott queue.

  • Ring buffer с атомарными индексами — для передачи данных между горутинами без блокировок.

Пример атомарного счетчика:

import (
    "fmt"
    "sync/atomic"
)

func main() {
    var counter int64 = 0
    atomic.AddInt64(&counter, 1) // атомарное увеличение
    fmt.Println(atomic.LoadInt64(&counter))
}

Для более сложных структур часто используют специализированные библиотеки, так как реализация lock-free структур — нетривиальная задача.