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 всё ок.
Что такое double-checked locking?
Middle
199 просмотровAFK Offer AI
Как логировать security events?