github.com/zhiqiangxu/util@v0.0.0-20230112053021-0a7aee056cd5/diskqueue/monotime.go (about)

     1  package diskqueue
     2  
     3  import (
     4  	"sync"
     5  	"time"
     6  )
     7  
     8  var (
     9  	timeLock sync.Mutex
    10  	lastTime int64
    11  )
    12  
    13  // NowNano returns monotonic nano time
    14  func NowNano() int64 {
    15  	timeLock.Lock()
    16  
    17  	thisTime := time.Now().UnixNano()
    18  
    19  	if thisTime <= lastTime {
    20  		thisTime = lastTime + 1
    21  	}
    22  
    23  	lastTime = thisTime
    24  
    25  	timeLock.Unlock()
    26  
    27  	return thisTime
    28  }