Как реализовать spin lock на Go?

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

Через atomic.CompareAndSwapInt32 в цикле: for !atomic.CompareAndSwapInt32(&lock, 0, 1) { runtime.Gosched() }. Но spin lock в Go почти всегда плохая идея: горутины не привязаны к CPU, спинящая горутина блокирует P и не даёт другим работать. sync.Mutex уже делает short spin перед парковкой. Используй Mutex.

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

Что такое go:linkname?