---
name: "Coro::Signal"
section: "3pm"
platform: "linux"
package: "libcoro-perl"
version: "6.570-4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Coro::Signal"
---

# Coro::Signal(3pm)

thread signals (binary semaphores)

## NAME

Coro::Signal - thread signals (binary semaphores)

## SYNOPSIS

```
 use Coro;
 my $sig = new Coro::Signal;
 $sig->wait; # wait for signal
 # ... some other "thread"
 $sig->send;
```

## DESCRIPTION

This module implements signals/binary semaphores/condition variables (basically all the same thing). You can wait for a signal to occur or send it, in which case it will wake up one waiter, or it can be broadcast, waking up all waiters.

It is recommended not to mix `"send"` and `"broadcast"` calls on the same `"Coro::Signal"` without some deep thinking: while it should work as documented, it can easily confuse you :-\>

You don't have to load `"Coro::Signal"` manually, it will be loaded automatically when you `"use Coro"` and call the `"new"` constructor.

- $sig = new Coro::Signal;

  Create a new signal.

- $sig-\>wait

  Wait for the signal to occur (via either `"send"` or `"broadcast"`). Returns immediately if the signal has been sent before.

- $sig-\>wait ($callback)

  If you pass a callback argument to `"wait"`, it will not wait, but immediately return. The callback will be called under the same conditions as `"wait"` without arguments would continue the thrad.

  The callback might wake up any number of threads, but is *NOT* allowed to block (switch to other threads).

- $sig-\>send

  Send the signal, waking up *one* waiting process or remember the signal if no process is waiting.

- $sig-\>broadcast

  Send the signal, waking up *all* waiting process. If no process is waiting the signal is lost.

- $sig-\>awaited

  Return true when the signal is being awaited by some process.

## AUTHOR/SUPPORT/CONTACT

```
   Marc A. Lehmann <schmorp@schmorp.de>
   http://software.schmorp.de/pkg/Coro.html
```
