Loading...
Searching...
No Matches
semaphore.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2017 TriaGnoSys GmbH
3 * SPDX-FileCopyrightText: 2013 Freie Universität Berlin
4 * SPDX-License-Identifier: LGPL-2.1-only
5 */
6
7#pragma once
8
23
24#include <errno.h>
25#include <time.h>
26
27#include "sema.h"
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
36typedef sema_t sem_t;
37
41#define SEM_FAILED ((sem_t *) 0)
42
64static inline int sem_init(sem_t *sem, int pshared, unsigned value)
65{
66 sema_create((sema_t *)sem, value);
67 (void)pshared;
68 return 0;
69}
70
92static inline int sem_destroy(sem_t *sem)
93{
94 sema_destroy((sema_t *)sem);
95 return 0;
96}
97
120static inline int sem_post(sem_t *sem)
121{
122 int res = sema_post((sema_t *)sem);
123
124 if (res < 0) {
125 errno = -res;
126 return -1;
127 }
128 return 0;
129}
130
148static inline int sem_wait(sem_t *sem)
149{
150 int res = sema_wait((sema_t *)sem);
151
152 if (res < 0) {
153 errno = -res;
154 return -1;
155 }
156 return 0;
157}
158
173static inline sem_t *sem_open(const char *name, int oflag, ...)
174{
175 (void)name;
176 (void)oflag;
177 errno = ENOMEM;
178 return SEM_FAILED;
179}
180
194static inline int sem_close(sem_t *sem)
195{
196 (void)sem;
197 errno = EINVAL;
198 return -1;
199}
200
214static inline int sem_unlink(const char *name)
215{
216 (void)name;
217 errno = ENOENT;
218 return -1;
219}
220
241int sem_timedwait(sem_t *sem, const struct timespec *abstime);
242
255static inline int sem_trywait(sem_t *sem)
256{
257 int res = sema_try_wait((sema_t *)sem);
258
259 if (res < 0) {
260 errno = -res;
261 return -1;
262 }
263 return 0;
264}
265
279static inline int sem_getvalue(sem_t *sem, int *sval)
280{
281 if (sem != NULL) {
282 *sval = (int)sema_get_value((sema_t *)sem);
283 return 0;
284 }
285 errno = EINVAL;
286 return -1;
287}
288
289#ifdef __cplusplus
290}
291#endif
292
#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:41
static int sem_unlink(const char *name)
Remove named semaphore name.
Definition semaphore.h:214
static int sem_getvalue(sem_t *sem, int *sval)
Get current value of sem and store it in sval.
Definition semaphore.h:279
sema_t sem_t
POSIX-specific semaphore type.
Definition semaphore.h:36
static int sem_init(sem_t *sem, int pshared, unsigned value)
Initialize an unnamed semaphore.
Definition semaphore.h:64
static int sem_trywait(sem_t *sem)
Test whether sem is posted.
Definition semaphore.h:255
static sem_t * sem_open(const char *name, int oflag,...)
Open a named semaphore name with open flags oflag.
Definition semaphore.h:173
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:92
static int sem_post(sem_t *sem)
Unlock a semaphore.
Definition semaphore.h:120
static int sem_wait(sem_t *sem)
Lock a semaphore.
Definition semaphore.h:148
static int sem_close(sem_t *sem)
Close descriptor for named semaphore sem.
Definition semaphore.h:194
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:169
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:108
static int sema_try_wait(sema_t *sema)
Test if the semaphore is posted.
Definition sema.h:185
int sema_post(sema_t *sema)
Signal semaphore.
Semaphore definitions.
A Semaphore.
Definition sema.h:64