lock

package
v1.13.6-rc.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 13, 2025 License: BSD-3-Clause Imports: 2 Imported by: 3

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Cond

type Cond struct {
	L sync.Locker
	// contains filtered or unexported fields
}

Cond implements a condition variable. Typically sync.Cond should be preferred. However, this implementation supports cancellable waits.

func NewCond

func NewCond(l sync.Locker) *Cond

NewCond returns a new Cond with Locker l.

func (*Cond) Broadcast

func (c *Cond) Broadcast()

Broadcast wakes all goroutines waiting on c.

It is allowed but not required for the caller to hold c.L during the call.

func (*Cond) Signal

func (c *Cond) Signal()

Signal wakes one goroutine waiting on c, if there is any.

It is allowed but not required for the caller to hold c.L during the call.

Signal() does not affect goroutine scheduling priority; if other goroutines are attempting to lock c.L, they may be awoken before a "waiting" goroutine.

func (*Cond) Wait

func (c *Cond) Wait(ctx context.Context) error

Wait atomically unlocks c.L and suspends execution of the calling goroutine. After later resuming execution, Wait locks c.L before returning. Unlike in other systems, Wait cannot return unless awoken by Cond.Broadcast, Cond.Signal, or due to the context being cancelled.

Because c.L is not locked while Wait is waiting, the caller typically cannot assume that the condition is true when Wait returns, even if the returned value is nil. Instead, the caller should Wait in a loop:

c.L.Lock()
defer c.L.Unlock()

for !condition() {
	if err := c.Wait(ctx); err != nil {
		return err
	}
}
... make use of condition ...

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL