diff options
Diffstat (limited to 'typedsync/cond.go')
-rw-r--r-- | typedsync/cond.go | 38 |
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() +} |