21 lines
378 B
Go
21 lines
378 B
Go
package dnsfilter
|
|
|
|
import (
|
|
"sync/atomic"
|
|
)
|
|
|
|
func updateMax(valuePtr *int64, maxPtr *int64) {
|
|
for {
|
|
current := atomic.LoadInt64(valuePtr)
|
|
max := atomic.LoadInt64(maxPtr)
|
|
if current <= max {
|
|
break
|
|
}
|
|
swapped := atomic.CompareAndSwapInt64(maxPtr, max, current)
|
|
if swapped {
|
|
break
|
|
}
|
|
// swapping failed because value has changed after reading, try again
|
|
}
|
|
}
|