aboutsummaryrefslogtreecommitdiff
path: root/exec2/state.go
diff options
context:
space:
mode:
Diffstat (limited to 'exec2/state.go')
-rw-r--r--exec2/state.go36
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)
+}