Что такое double-checked locking?

Middle
199 просмотров
AFK Offer AI

Double-checked locking — оптимизация: сначала проверяешь условие без блокировки (atomic read), если не инициализировано — берёшь mutex и проверяешь ещё раз. В Go это по сути то, что делает sync.Once внутри. Ручная реализация: if atomic.LoadInt32(&done) == 0 { mu.Lock(); if done == 0 { init(); atomic.StoreInt32(&done, 1) }; mu.Unlock() }. Не пиши сам — используй sync.Once, он делает то же самое корректно. В Java это было проблемой из-за memory model, в Go с atomic всё ок.

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

Как логировать security events?