zephyr/lib/libc/common/source/thrd/cnd.c
Christopher Friedt 7e539e2706 libc: common: support for C11 condition variables
Add C11 condition variable support to go with C11 threads
and mutexes.

Signed-off-by: Christopher Friedt <cfriedt@meta.com>
2023-11-14 18:23:42 +09:00

72 lines
1.1 KiB
C

/*
* Copyright (c) 2023, Meta
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <errno.h>
#include <threads.h>
#include <zephyr/posix/pthread.h>
int cnd_broadcast(cnd_t *cond)
{
switch (pthread_cond_broadcast(cond)) {
case 0:
return thrd_success;
default:
return thrd_error;
}
}
void cnd_destroy(cnd_t *cond)
{
(void)pthread_cond_destroy(cond);
}
int cnd_init(cnd_t *cond)
{
switch (pthread_cond_init(cond, NULL)) {
case 0:
return thrd_success;
case ENOMEM:
return thrd_nomem;
default:
return thrd_error;
}
}
int cnd_signal(cnd_t *cond)
{
switch (pthread_cond_signal(cond)) {
case 0:
return thrd_success;
case ENOMEM:
return thrd_nomem;
default:
return thrd_error;
}
}
int cnd_timedwait(cnd_t *restrict cond, mtx_t *restrict mtx, const struct timespec *restrict ts)
{
switch (pthread_cond_timedwait(cond, mtx, ts)) {
case 0:
return thrd_success;
case ETIMEDOUT:
return thrd_timedout;
default:
return thrd_error;
}
}
int cnd_wait(cnd_t *cond, mtx_t *mtx)
{
switch (pthread_cond_wait(cond, mtx)) {
case 0:
return thrd_success;
default:
return thrd_error;
}
}