package concurrency

import "sync"

type AtomicCounter struct {
	mutex     sync.Mutex
	lastValue int
}

func NewAtomicCounter() *AtomicCounter {
	return &AtomicCounter{
		mutex:     sync.Mutex{},
		lastValue: 0,
	}
}

func (counter *AtomicCounter) IncrementAndGet() int {
	counter.mutex.Lock()
	defer counter.mutex.Unlock()
	counter.lastValue++
	return counter.lastValue
}