Как реализовать lock-free queue?

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

Lock-free очередь использует atomic операции вместо mutex. Основа — CAS (Compare-And-Swap): читаешь head, создаёшь новый node, атомарно заменяешь head если он не изменился. Если изменился — retry. В Go: atomic.CompareAndSwapPointer. Классическая реализация — Michael-Scott queue (linked list + CAS на head и tail). Сложно написать правильно — ABA problem, memory ordering. На практике каналы Go быстрее для большинства случаев. Lock-free нужен для экстремальной производительности.

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

Как работает page allocator?