Как реализовать lock-free очередь на Go?

Senior
137 просмотров
AFK Offer AI

Классический подход — Michael-Scott queue: два атомарных указателя (head, tail), каждый узел с next. Enqueue: CAS на tail.next, потом CAS на tail. Dequeue: CAS на head. Нужен помощник для продвижения tail если другая горутина не успела. В Go удобно через atomic.Pointer[Node]. Но на практике channel часто лучше и проще.

Следующий вопрос

Что выведет: m := map[bool]string{true: "yes", false: "no"}; fmt.Println(m[1 > 0])?