---
name: "IPC::Semaphore"
section: "3p"
platform: "openbsd"
package: "man"
version: "8.0-current-20261101"
release: "OpenBSD 8.0-current (2026-11-01)"
platforms: ["openbsd"]
url: "https://new.carta.tech/IPC::Semaphore"
---

# IPC::Semaphore(3p)

SysV Semaphore IPC object class

## NAME

IPC::Semaphore - SysV Semaphore IPC object class

## SYNOPSIS

```
    use IPC::SysV qw(IPC_PRIVATE S_IRUSR S_IWUSR IPC_CREAT);
    use IPC::Semaphore;
    $sem = IPC::Semaphore->new(IPC_PRIVATE, 10, S_IRUSR | S_IWUSR | IPC_CREAT);
    $sem->setall( (0) x 10);
    @sem = $sem->getall;
    $ncnt = $sem->getncnt;
    $zcnt = $sem->getzcnt;
    $ds = $sem->stat;
    $sem->remove;
```

## DESCRIPTION

A class providing an object based interface to SysV IPC semaphores.

## METHODS

- new ( KEY , NSEMS , FLAGS )

  Create a new semaphore set associated with `"KEY"`. `"NSEMS"` is the number of semaphores in the set. A new set is created if

  - •

    `"KEY"` is equal to `"IPC_PRIVATE"`

  - •

    `"KEY"` does not already have a semaphore identifier associated with it, and `"`*FLAGS*` & IPC_CREAT"` is true.

  On creation of a new semaphore set `"FLAGS"` is used to set the permissions.  Be careful not to set any flags that the Sys V IPC implementation does not allow: in some systems setting execute bits makes the operations fail.

- getall

  Returns the values of the semaphore set as an array.

- getncnt ( SEM )

  Returns the number of processes waiting for the semaphore `"SEM"` to become greater than its current value

- getpid ( SEM )

  Returns the process id of the last process that performed an operation on the semaphore `"SEM"`.

- getval ( SEM )

  Returns the current value of the semaphore `"SEM"`.

- getzcnt ( SEM )

  Returns the number of processes waiting for the semaphore `"SEM"` to become zero.

- id

  Returns the system identifier for the semaphore set.

- op ( OPLIST )

  `"OPLIST"` is a list of operations to pass to `"semop"`. `"OPLIST"` is a concatenation of smaller lists, each which has three values. The first is the semaphore number, the second is the operation and the last is a flags value. See [**semop**(2)](/semop/2.md) for more details. For example

  ```
      $sem->op(
          0, -1, IPC_NOWAIT,
          1,  1, IPC_NOWAIT
      );
  ```

- remove

  Remove and destroy the semaphore set from the system.

- set ( STAT )

  - set ( NAME =\> VALUE \[, NAME =\> VALUE ...\] )

  `"set"` will set the following values of the `"stat"` structure associated with the semaphore set.

  ```
      uid
      gid
      mode (only the permission bits)
  ```

  `"set"` accepts either a stat object, as returned by the `"stat"` method, or a list of *name*-*value* pairs.

- setall ( VALUES )

  Sets all values in the semaphore set to those given on the `"VALUES"` list. `"VALUES"` must contain the correct number of values.

- setval ( N , VALUE )

  Set the `"N"`th value in the semaphore set to `"VALUE"`

- stat

  Returns an object of type `"IPC::Semaphore::stat"` which is a sub-class of `"Class::Struct"`. It provides the following fields. For a description of these fields see your system documentation.

  ```
      uid
      gid
      cuid
      cgid
      mode
      ctime
      otime
      nsems
  ```

## SEE ALSO

IPC::SysV, Class::Struct, [**semget**(2)](/semget/2.md), [**semctl**(2)](/semctl/2.md), [**semop**(2)](/semop/2.md)

## AUTHORS

Graham Barr \<gbarr@pobox.com\>, Marcus Holland-Moritz \<mhx@cpan.org\>

## COPYRIGHT

Version 2.x, Copyright (C) 2007-2013, Marcus Holland-Moritz.

Version 1.x, Copyright (c) 1997, Graham Barr.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
