package configurationLockExample
import (
"sync"
)
type _lockReference struct {
fileIdentifier map[string]*sync.Mutex
var (
_configurationLock _lockReference
_lockReferenceLock sync.RWMutex
)
func init() {
_configurationLock.fileIdentifier = make(map[string]*sync.Mutex)
}
func (lockReference *_lockReference) Lock(identifier string) {
_lockReferenceLock.Lock()
if _, hasKey := lockReference.fileIdentifier[identifier]; hasKey {
// - reserved for future development; intentionally left blank
} else { // mutex not already constructed in referenced map; construct it
lockReference.fileIdentifier[identifier] = &sync.Mutex{}
}
lockReference.fileIdentifier[identifier].Lock()
_lockReferenceLock.Unlock()
}
func (lockReference *_lockReference) Unlock(identifier string) {
_lockReferenceLock.Lock()
defer func() {
errorReturn := recover()
_lockReferenceLock.Unlock()
}()
lockReference.fileIdentifier[identifier].Unlock()
}
func (lockReference *_lockReference) Delete(identifier string) {
_lockReferenceLock.Lock()
if _, hasKey := lockReference.fileIdentifier[identifier]; hasKey
delete(lockReference.fileIdentifier, identifier)
}
_lockReferenceLock.Unlock()
}
func StoreConfiguration(configurationFile string, recordName string, recordContent string) error {
_configurationLock.Lock(configurationFile)
defer _configurationLock.Delete(configurationFile)
defer _configurationLock.Unlock(configurationFile)
// handle configuration stuff here