epoc32/include/stdapis/semaphore.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:27:01 +0100
branchSymbian2
changeset 3 e1b950c65cb4
parent 0 061f57f2323e
child 4 837f303aceeb
permissions -rw-r--r--
Attempt to represent the S^2->S^3 header reorganisation as a series of "hg rename" operations
     1 /*
     2 * Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     5 * under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
     8 *
     9 * Initial Contributors:
    10 * Nokia Corporation - initial contribution.
    11 *
    12 * Contributors:
    13 *
    14 * Description:
    15 * Name        : semaphore.h
    16 * Part of     : semaphore
    17 * Interface   : POSIX, semaphores
    18 * POSIX implementation of semaphores on Symbian
    19 * Version     : 
    20 * All rights reserved.
    21 * Redistribution and use in source and binary forms, with or without 
    22 * modification, are permitted provided that the following conditions are met:
    23 * Redistributions of source code must retain the above copyright notice, this 
    24 * list of conditions and the following disclaimer. 
    25 * Redistributions in binary form must reproduce the above copyright notice, 
    26 * this list of conditions and the following disclaimer in the documentation 
    27 * and/or other materials provided with the distribution. 
    28 * Neither the name of the <ORGANIZATION> nor the names of its contributors 
    29 * may be used to endorse or promote products derived from this software 
    30 * without specific prior written permission. 
    31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
    32 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
    33 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
    34 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
    35 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
    36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
    37 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
    38 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    39 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
    40 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    41 *
    42 */
    43 
    44 
    45 
    46 #ifndef __SEMAPHORE_H__
    47 #define __SEMAPHORE_H__
    48 
    49 #include <sys/types.h>
    50 
    51 #ifdef __cplusplus
    52 extern "C"
    53 {
    54 #endif              /* __cplusplus */
    55 
    56 /*Semaphores supported */
    57 
    58 #define SEM_FAILED -1
    59 typedef struct _sem_t* sem_t;
    60 
    61 /*
    62 This function initializes the semaphore object.
    63 The semaphore count is set to the initial count value. 
    64 */
    65 IMPORT_C extern int sem_init (sem_t * sem, int pshared, unsigned int value);
    66 
    67 /*
    68 This function destroys the semaphore  object. 
    69 */
    70 IMPORT_C extern int  sem_destroy (sem_t* sem);
    71 
    72 /*
    73 This function atomically decrements sem's count if it is greater than 0 and returns immediately,
    74 or it returns immediately with a return code of -1 after having set errno to EAGAIN. 
    75 sem_trywait never blocks.
    76 */
    77 IMPORT_C extern int sem_trywait (sem_t* sem);
    78 
    79 /*
    80 This function atomically decrements sem's count if it is greater than 0 and returns immediately
    81 or it suspends the calling thread until it can resume following a call to sem_post or sem_post_multiple
    82 */
    83 IMPORT_C extern int sem_wait (sem_t* sem);
    84 
    85 /*
    86 This function atomically decrements sem's count if it is greater than 0 and returns immediately, or it 
    87 suspends the calling thread. If timeout time lapses before the thread can be resumed because of a sem_post,
    88 case, then sem_timedwait returns with a return code of -1 after having set errno to ETIMEDOUT. If the 
    89 thread  can return without suspending then abstime parameter is not checked.
    90 */
    91 IMPORT_C extern int sem_timedwait (sem_t* sem, const struct timespec* abstime);
    92 
    93 /*
    94 The function increments (unlocks) the semaphore pointed to by sem .
    95 If there are threads blocked on the semaphore when sem_post is called, the highest priority thread that has been blocked the longest on
    96 the semaphore will be allowed to return from sem_wait .
    97 If successful, the function returns zero; otherwise, it returns -1 and set errno to indicate the error.
    98 */
    99 IMPORT_C extern int sem_post (sem_t* sem);
   100 
   101 /*
   102 This function establish a connection between a named semaphore and a process
   103 */
   104 /* IMPORT_C extern sem_t* sem_open (const char* name,int oflag,mode_t mode, unsigned int value); */
   105 
   106 /*
   107 This function indicate that the calling process is finished using the named semaphore indicated by sem*/
   108 /* IMPORT_C extern int sem_close (sem_t* sem); */
   109 
   110 /*
   111 This function cleans up resources associated with a system-wide semaphore.
   112 */
   113 /* IMPORT_C extern int sem_unlink (const char* name); */
   114 
   115 /*
   116 This function updates the location referenced by the sval argument with the value of the semaphore 
   117 referenced by sem without affecting the state of the semaphore. 
   118 The updated value represents an actual semaphore value that occurred at some unspecified time 
   119 during the call, but it need not be the actual value of the semaphore when it is returned to 
   120 the calling process. If sem is locked, then the object to which sval points shall either be set 
   121 to zero or to a negative number whose absolute value represents the number of processes waiting
   122 for the semaphore at some unspecified time during the call.
   123 */
   124 IMPORT_C extern int sem_getvalue (sem_t* sem, int* sval);
   125 
   126 
   127 #ifdef __cplusplus
   128 }               /* End of extern "C" */
   129 #endif              /* __cplusplus */
   130 
   131 #endif              /* __SEMAPHORE_H__ */