diff options
Diffstat (limited to 'exec2/state.go')
-rw-r--r-- | exec2/state.go | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/exec2/state.go b/exec2/state.go new file mode 100644 index 0000000..30f10d7 --- /dev/null +++ b/exec2/state.go @@ -0,0 +1,36 @@ +package hello + +import ( + "sync" +) + +// taskStore provides a mechanism to store and retrieve +// task handles given a string identifier. The ID should +// be unique per task +type taskStore struct { + store map[string]*taskHandle + lock sync.RWMutex +} + +func newTaskStore() *taskStore { + return &taskStore{store: map[string]*taskHandle{}} +} + +func (ts *taskStore) Set(id string, handle *taskHandle) { + ts.lock.Lock() + defer ts.lock.Unlock() + ts.store[id] = handle +} + +func (ts *taskStore) Get(id string) (*taskHandle, bool) { + ts.lock.RLock() + defer ts.lock.RUnlock() + t, ok := ts.store[id] + return t, ok +} + +func (ts *taskStore) Delete(id string) { + ts.lock.Lock() + defer ts.lock.Unlock() + delete(ts.store, id) +} |