提交 14397cec 编写于 作者: J Jens Gustedt 提交者: Rich Felker

add C11 condition variable functions

Because of the clear separation for private pthread_cond_t these
interfaces are quite simple and direct.
上级 8b047293
#include <threads.h>
int __private_cond_signal(cnd_t *, int);
int cnd_broadcast(cnd_t *c)
{
/* This internal function never fails, and always returns zero,
* which matches the value thrd_success is defined with. */
return __private_cond_signal(c, -1);
}
#include <threads.h>
void cnd_destroy(cnd_t *c)
{
/* For private cv this is a no-op */
}
#include <threads.h>
int cnd_init(cnd_t *c)
{
*c = (cnd_t){ 0 };
return thrd_success;
}
#include <threads.h>
int __private_cond_signal(cnd_t *, int);
int cnd_signal(cnd_t *c)
{
/* This internal function never fails, and always returns zero,
* which matches the value thrd_success is defined with. */
return __private_cond_signal(c, 1);
}
#include <threads.h>
#include <errno.h>
int __pthread_cond_timedwait(cnd_t *restrict, mtx_t *restrict, const struct timespec *restrict);
int cnd_timedwait(cnd_t *restrict c, mtx_t *restrict m, const struct timespec *restrict ts)
{
int ret = __pthread_cond_timedwait(c, m, ts);
switch (ret) {
/* May also return EINVAL or EPERM. */
default: return thrd_error;
case 0: return thrd_success;
case ETIMEDOUT: return thrd_timedout;
}
}
#include <threads.h>
int cnd_wait(cnd_t *c, mtx_t *m)
{
/* Calling cnd_timedwait with a null pointer is an extension.
* It is convenient here to avoid duplication of the logic
* for return values. */
return cnd_timedwait(c, m, 0);
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册