summaryrefslogtreecommitdiff
path: root/typedsync/cond.go
diff options
context:
space:
mode:
Diffstat (limited to 'typedsync/cond.go')
-rw-r--r--typedsync/cond.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/typedsync/cond.go b/typedsync/cond.go
new file mode 100644
index 0000000..00d3164
--- /dev/null
+++ b/typedsync/cond.go
@@ -0,0 +1,38 @@
+// Copyright (C) 2023 Luke Shumaker <lukeshu@lukeshu.com>
+//
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+package typedsync
+
+import (
+ "sync"
+)
+
+// Cond is a type-safe equivalent of the standard library's sync.Cond.
+//
+// See the [sync.Cond documentation] for full details.
+//
+// [sync.Cond documentation]: https://pkg.go.dev/sync#Cond
+type Cond[T Locker] struct {
+ L T
+ inner sync.Cond
+}
+
+func NewCond[T Locker](l T) *Cond[T] {
+ return &Cond[T]{L: l}
+}
+
+func (c *Cond[T]) Broadcast() {
+ c.inner.L = c.L
+ c.inner.Broadcast()
+}
+
+func (c *Cond[T]) Signal() {
+ c.inner.L = c.L
+ c.inner.Signal()
+}
+
+func (c *Cond[T]) Wait() {
+ c.inner.L = c.L
+ c.inner.Wait()
+}