---
name: "corelinux_SemaphoreGroup"
section: "3"
platform: "linux"
package: "libcorelinux-dev"
version: "0.4.32-5"
release: "Debian 3.1 (Sarge)"
platforms: ["linux"]
url: "https://new.carta.tech/corelinux_SemaphoreGroup"
---

# corelinux\_SemaphoreGroup(3)

A SemaphoreGroup is an extension to the Linux semaphore set.

## NAME

corelinux::SemaphoreGroup - A **SemaphoreGroup** is an extension to the Linux semaphore set.

## SYNOPSIS

`#include <SemaphoreGroup.hpp>`

Inherits **corelinux::Synchronized**.

Inherited by **corelinux::CoreLinuxGuardGroup**, **corelinux::EventSemaphoreGroup**, **corelinux::GatewaySemaphoreGroup**, and **corelinux::MutexSemaphoreGroup**.

### Public Member Functions

**SemaphoreGroup** (Short, Int Rights=OWNER\_ALL)  throw (Assertion,SemaphoreException)\
 *Default constructor creates a private group semaphores.*  **SemaphoreGroup** (Short, **SemaphoreGroupIdentifierCref**, Int, **CreateDisposition** disp=FAIL\_IF\_EXISTS)  throw (Assertion,SemaphoreException)\
 *Constructor to open or create a semaphore group with a specific identifier.*  **SemaphoreGroup** (Short, CharCptr, Int, **CreateDisposition** disp=FAIL\_IF\_EXISTS)  throw (Assertion,SemaphoreException)\
 *Constructor to open or create a semaphore group by name.*  virtual **~SemaphoreGroup** (void)\
 *Virtual destructor.*  bool **operator==** (**SemaphoreGroupCref**) const \
 *Equality operator compares the identifier.*  Short **getSemaphoreCount** (void) const \
 *Return the number of semaphores in the group.*  **SemaphoreGroupIdentifierCref** **getIdentifier** (void) const \
 *Return the SemaphoreGroupIdentifier.*  virtual **AbstractSemaphorePtr** **createSemaphore** (void)=0  throw ( SemaphoreException )\
 *Create a default semaphore type from group.*  virtual **AbstractSemaphorePtr** **createSemaphore** (**SemaphoreIdentifierRef** aIdentifier, **CreateDisposition** disp=CREATE\_OR\_REUSE, bool Recursive=false, bool Balking=false)=0  throw ( SemaphoreException )\
 *Create or open (use) a specific semphore in the group.*  virtual **AbstractSemaphorePtr** **createSemaphore** (std::string aName, **CreateDisposition** disp=CREATE\_OR\_REUSE, bool Recursive=false, bool Balking=false)=0  throw ( SemaphoreException )\
 *Create or open (use) a specific semphore in the group.*  virtual void **destroySemaphore** (**AbstractSemaphorePtr**)=0  throw ( SemaphoreException )\
 *Destroys a created semaphore from this group.*

### Protected Member Functions

**SemaphoreGroup** (void)  throw ( Assertion )\
 *Default constructor not allowed.*  **SemaphoreGroup** (**SemaphoreGroupCref**)  throw ( Assertion )\
 *Copy constructor not allowed.*  **SemaphoreGroupRef** **operator=** (**SemaphoreGroupCref**)  throw ( Assertion )\
 *Assignment operator not allowed.*  void **setGroupType** (IntCref) const \
 *This indirects to CSA for non-private group types.*  bool **isPrivate** (void) const \
 *Internal check for creation visibility.*

### Friends

class **SemaphoreCommon**\

## Detailed Description

A **SemaphoreGroup** is an extension to the Linux semaphore set.

This provides a way to logically group semaphores. A **SemaphoreGroup** acts as a **Semaphore** factory, creating and destroying Semaphores for the user.

## Constructor & Destructor Documentation

### corelinux::SemaphoreGroup::SemaphoreGroup (Short, Int Rights = OWNER\_ALL) throw (Assertion,SemaphoreException)

Default constructor creates a private group semaphores. **Parameters:**

*Short* Number of semaphores in group \
 *AccessRights* Specifies access control for group, default is owner only.

**Exceptions:**

*Assertion* if aCount \< 1 \
 *SemaphoreException* if kernel group create call fails.

**See also:**

**corelinux::AccessRights**

### corelinux::SemaphoreGroup::SemaphoreGroup (Short, SemaphoreGroupIdentifierCref, Int, CreateDisposition disp = FAIL\_IF\_EXISTS) throw (Assertion,SemaphoreException)

Constructor to open or create a semaphore group with a specific identifier. **Parameters:**

*Short* Number of semaphores in group, this only has meaning used if failOnExist = true \
 *SemaphoreGroupIdentifier* valid group identifier either through a system call or via another ipc mechanism \
 *AccessRights* Specifies access control for group \
 *CreateDisposition* indicates how to treat the conditions that the group may meet in the request: CREATE\_OR\_REUSE indicates that the caller doesn't care FAIL\_IF\_EXISTS indicates the attempt was for a create FAIL\_IF\_NOTEXISTS indicates the attempt was for a open

**Exceptions:**

*Assertion* if aCount \< 1 \
 *SemaphoreException* for described states

**See also:**

**corelinux::AccessRights**

### corelinux::SemaphoreGroup::SemaphoreGroup (Short, CharCptr, Int, CreateDisposition disp = FAIL\_IF\_EXISTS) throw (Assertion,SemaphoreException)

Constructor to open or create a semaphore group by name. **Parameters:**

*Short* Number of semaphores in group, this only has meaning used if failOnExist = true \
 *Char* pointer to Group name \
 *AccessRights* Specifies access control for group \
 *CreateDisposition* indicates how to treat the conditions that the group may meet in the request: CREATE\_OR\_REUSE indicates that the caller doesn't care FAIL\_IF\_EXISTS indicates the attempt was for a create FAIL\_IF\_NOTEXISTS indicates the attempt was for a open

**Exceptions:**

*Assertion* if aCount \< 1 or aCount \> system defined maximum for group \
 *SemaphoreException* for described states

**See also:**

**corelinux::AccessRights**

## Member Function Documentation

### virtual AbstractSemaphorePtr corelinux::SemaphoreGroup::createSemaphore (std::string aName, CreateDisposition disp = CREATE\_OR\_REUSE, bool Recursive = false, bool Balking = false) throw ( SemaphoreException )` [pure virtual]`

Create or open (use) a specific semphore in the group. **Parameters:**

*string* identifies which semphore id to create or attempt to use \
 *CreateDisposition* indicates how to treat the conditions that the group may meet in the request: CREATE\_OR\_REUSE indicates that the caller doesn't care FAIL\_IF\_EXISTS indicates the attempt was for a create FAIL\_IF\_NOTEXISTS indicates the attempt was for a open \
 *Recursive* to allow same thread multiple locks \
 *Balking* to allow the semaphore to balk

**Returns:**

**AbstractSemaphore** aSem - pointer to created or opened semaphore

**Exceptions:**

*SemaphoreException* if the disposition disagrees with the semaphore state, or if it is a erroneous identifier

Implemented in **corelinux::CoreLinuxGuardGroup**, **corelinux::EventSemaphoreGroup**, **corelinux::GatewaySemaphoreGroup**, and **corelinux::MutexSemaphoreGroup**.

### virtual AbstractSemaphorePtr corelinux::SemaphoreGroup::createSemaphore (SemaphoreIdentifierRef aIdentifier, CreateDisposition disp = CREATE\_OR\_REUSE, bool Recursive = false, bool Balking = false) throw ( SemaphoreException )` [pure virtual]`

Create or open (use) a specific semphore in the group. **Parameters:**

*SemaphoreIdentifier* identifies which semphore id to create or attempt to use \
 *CreateDisposition* indicates how to treat the conditions that the group may meet in the request: CREATE\_OR\_REUSE indicates that the caller doesn't care FAIL\_IF\_EXISTS indicates the attempt was for a create FAIL\_IF\_NOTEXISTS indicates the attempt was for a open \
 *Recursive* to allow same thread multiple locks \
 *Balking* to allow the semaphore to balk

**Returns:**

**AbstractSemaphore** aSem - pointer to created or opened semaphore

**Exceptions:**

*SemaphoreException* if the disposition disagrees with the semaphore state, or if it is a erroneous identifier

Implemented in **corelinux::CoreLinuxGuardGroup**, **corelinux::EventSemaphoreGroup**, **corelinux::GatewaySemaphoreGroup**, and **corelinux::MutexSemaphoreGroup**.

### virtual AbstractSemaphorePtr corelinux::SemaphoreGroup::createSemaphore (void) throw ( SemaphoreException )` [pure virtual]`

Create a default semaphore type from group. **Returns:**

**AbstractSemaphore** aSem - pointer to created semaphore

**Exceptions:**

*SemaphoreException* if no sems left in group

Implemented in **corelinux::CoreLinuxGuardGroup**, **corelinux::EventSemaphoreGroup**, **corelinux::GatewaySemaphoreGroup**, and **corelinux::MutexSemaphoreGroup**.

### virtual void corelinux::SemaphoreGroup::destroySemaphore (AbstractSemaphorePtr) throw ( SemaphoreException )` [pure virtual]`

Destroys a created semaphore from this group. **Parameters:**

*AbstractSemaphore* pointer of semaphore to destroy

**Exceptions:**

*SemaphoreException* if semaphore does not belong to this group

Implemented in **corelinux::CoreLinuxGuardGroup**, **corelinux::EventSemaphoreGroup**, **corelinux::GatewaySemaphoreGroup**, and **corelinux::MutexSemaphoreGroup**.

### SemaphoreGroupIdentifierCref corelinux::SemaphoreGroup::getIdentifier (void) const` [inline]`

Return the SemaphoreGroupIdentifier. **Returns:**

SemaphoreGroupIdentifier

### Short corelinux::SemaphoreGroup::getSemaphoreCount (void) const

Return the number of semaphores in the group. **Returns:**

Short Count

### bool corelinux::SemaphoreGroup::isPrivate (void) const` [inline, protected]`

Internal check for creation visibility. This implies that even though the group may be shared, the user has elected to use privately.

### bool corelinux::SemaphoreGroup::operator== (SemaphoreGroupCref) const

Equality operator compares the identifier. **Parameters:**

*SemaphoreGroup* a reference to **SemaphoreGroup**

**Returns:**

bool True if equal

### void corelinux::SemaphoreGroup::setGroupType (IntCref) const` [protected]`

This indirects to CSA for non-private group types. **Parameters:**

*Int* reference to type where 0 = Mutex, 1 = Gateway, 2 = **Event**, 3-10 reserved. Anything greater than 10 is user defined.

## Author

Generated automatically by Doxygen for CoreLinux++ from the source code.
