Loading...
Searching...
No Matches
semaphore.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2017 TriaGnoSys GmbH
3 * 2013 Freie Universität Berlin
4 *
5 * This file is subject to the terms and conditions of the GNU Lesser
6 * General Public License v2.1. See the file LICENSE in the top level
7 * directory for more details.
8 */
9
10#pragma once
11
26
27#include <errno.h>
28#include <time.h>
29
30#include "sema.h"
31
32#ifdef __cplusplus
33extern "C" {
34#endif
35
39typedef sema_t sem_t;
40
44#define SEM_FAILED ((sem_t *) 0)
45
67static inline int sem_init(sem_t *sem, int pshared, unsigned value)
68{
69 sema_create((sema_t *)sem, value);
70 (void)pshared;
71 return 0;
72}
73
95static inline int sem_destroy(sem_t *sem)
96{
97 sema_destroy((sema_t *)sem);
98 return 0;
99}
100
123static inline int sem_post(sem_t *sem)
124{
125 int res = sema_post((sema_t *)sem);
126
127 if (res < 0) {
128 errno = -res;
129 return -1;
130 }
131 return 0;
132}
133
151static inline int sem_wait(sem_t *sem)
152{
153 int res = sema_wait((sema_t *)sem);
154
155 if (res < 0) {
156 errno = -res;
157 return -1;
158 }
159 return 0;
160}
161
176static inline sem_t *sem_open(const char *name, int oflag, ...)
177{
178 (void)name;
179 (void)oflag;
180 errno = ENOMEM;
181 return SEM_FAILED;
182}
183
197static inline int sem_close(sem_t *sem)
198{
199 (void)sem;
200 errno = EINVAL;
201 return -1;
202}
203
217static inline int sem_unlink(const char *name)
218{
219 (void)name;
220 errno = ENOENT;
221 return -1;
222}
223
244int sem_timedwait(sem_t *sem, const struct timespec *abstime);
245
258static inline int sem_trywait(sem_t *sem)
259{
260 int res = sema_try_wait((sema_t *)sem);
261
262 if (res < 0) {
263 errno = -res;
264 return -1;
265 }
266 return 0;
267}
268
282static inline int sem_getvalue(sem_t *sem, int *sval)
283{
284 if (sem != NULL) {
285 *sval = (int)sema_get_value((sema_t *)sem);
286 return 0;
287 }
288 errno = EINVAL;
289 return -1;
290}
291
292#ifdef __cplusplus
293}
294#endif
295
#define ENOENT
No such file or directory.
Definition errno.h:113
#define EINVAL
Invalid argument.
Definition errno.h:96
#define ENOMEM
Not enough space.
Definition errno.h:117
int errno
number of last error
#define SEM_FAILED
Value returned if ‘sem_open’ failed.
Definition semaphore.h:44
static int sem_unlink(const char *name)
Remove named semaphore name.
Definition semaphore.h:217
static int sem_getvalue(sem_t *sem, int *sval)
Get current value of sem and store it in sval.
Definition semaphore.h:282
sema_t sem_t
POSIX-specific semaphore type.
Definition semaphore.h:39
static int sem_init(sem_t *sem, int pshared, unsigned value)
Initialize an unnamed semaphore.
Definition semaphore.h:67
static int sem_trywait(sem_t *sem)
Test whether sem is posted.
Definition semaphore.h:258
static sem_t * sem_open(const char *name, int oflag,...)
Open a named semaphore name with open flags oflag.
Definition semaphore.h:176
int sem_timedwait(sem_t *sem, const struct timespec *abstime)
Similar to ‘sem_wait’ but wait only until abstime.
static int sem_destroy(sem_t *sem)
destroy an unnamed semaphore
Definition semaphore.h:95
static int sem_post(sem_t *sem)
Unlock a semaphore.
Definition semaphore.h:123
static int sem_wait(sem_t *sem)
Lock a semaphore.
Definition semaphore.h:151
static int sem_close(sem_t *sem)
Close descriptor for named semaphore sem.
Definition semaphore.h:197
void sema_create(sema_t *sema, unsigned int value)
Creates semaphore dynamically.
static int sema_wait(sema_t *sema)
Wait for a semaphore being posted (without timeout).
Definition sema.h:172
void sema_destroy(sema_t *sema)
Destroys a semaphore.
static unsigned sema_get_value(const sema_t *sema)
Get a semaphore's current value.
Definition sema.h:111
static int sema_try_wait(sema_t *sema)
Test if the semaphore is posted.
Definition sema.h:188
int sema_post(sema_t *sema)
Signal semaphore.
Semaphore definitions.
A Semaphore.
Definition sema.h:67