Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ _lwp_sema_init(2) — UnixWare 2.01

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

_lwp_sema_post(2)

_lwp_sema_wait(2)

_lwp_sema_trywait(2)

sema_destroy(3synch)

sema_post(3synch)

sema_trywait(3synch)

sema_wait(3synch)






       _lwp_sema_init(2)                                  _lwp_sema_init(2)


       NAME
             _lwp_sema_init - initialize a semaphore

       SYNOPSIS
             #include <synch.h>
             int _lwp_sema_init(_lwp_sema_t *sema, int count);

          Parameters
             sema        pointer to semaphore to initialize

             count       number of resources to be protected by the
                         semaphore

       DESCRIPTION
             _lwp_sema_init initializes the semaphore sema to a known
             state.  Once initialized, the semaphore can be used any number
             of times without being re-initialized.  A semaphore should not
             be re-initialized while lightweight processes (LWPs) are
             waiting at the semaphore.

          count Parameter
             count, which must be greater than or equal to zero, defines
             the initial count of resources protected by the semaphore.  If
             count is 1, the semaphore will be a binary semaphore.  If
             count is greater than 1, the semaphore will be a counting, or
             general, semaphore.

          sema Parameter
             sema points to the semaphore to be initialized.

          Return Values
             On success sema is initialized and the operation returns zero.

          Errors
             If any of the following conditions is detected, _lwp_sema_init
             fails and returns the corresponding value:

             EINVAL   Invalid argument specified.

       USAGE
             Conceptually, a semaphore is a non-negative integer count.
             Semaphores are typically used to coordinate access to
             resources.  The semaphore count is initialized with
             _lwp_sema_init to the number of free resources.  LWPs then
             atomically increment the count with _lwp_sema_post when
             resources are added and atomically decrement the count with


                           Copyright 1994 Novell, Inc.               Page 1













      _lwp_sema_init(2)                                  _lwp_sema_init(2)


            _lwp_sema_wait when resources are removed.  When the semaphore
            count becomes zero, indicating that no more resources are
            present, LWPs trying to decrement the semaphore with
            _lwp_sema_wait will block until the count becomes greater than
            zero.

            Semaphores are classified as one of two types: binary or
            counting.

            Binary semaphores (those that take on only values of 1 and 0)
            are similar in use and purpose to mutex locks: they typically
            are used to ensure that only one LWP at a time executes a
            critical section of code.  When used before access to shared
            data, they guarantee the integrity of the data.

            Counting or general semaphores (those with a count greater
            than 1) are typically used to protect a pool of resources.

            Note that semaphores protect data only when the convention of
            calling _lwp_sema_wait and _lwp_sema_post is faithfully
            followed before and after any access of the data.

         Warnings
            _lwp_sema_init does not examine the sema argument before
            initializing it.  If _lwp_sema_init is called more than once
            for the same semaphore, it will overwrite its state.  It is
            the user's responsibility to ensure that _lwp_sema_init is
            only called once for each semaphore.

            Operations on semaphores initialized with _lwp_sema_init are
            not recursive; an LWP can block itself if it attempts to
            reacquire a semaphore that it has already acquired.

      REFERENCES
            _lwp_sema_post(2), _lwp_sema_wait(2), _lwp_sema_trywait(2),
            sema_destroy(3synch), sema_post(3synch), sema_trywait(3synch),
            sema_wait(3synch)

      NOTICES
            Lightweight processes (LWPs) are internal interfaces and are
            subject to change.  Their use should be avoided.







                          Copyright 1994 Novell, Inc.               Page 2








Typewritten Software • bear@typewritten.org • Edmonds, WA 98026