C语言 虚假唤醒的返回值是多少?



在 C11 中,cnd_timedwait函数定义如下:

int cnd_timedwait( cnd_t* restrict cond, mtx_t* restrict mutex,
const struct timespec* restrict time_point );

以原子方式解锁互斥锁指向的互斥锁,并阻止 cond 指向的条件变量,直到线程发出cnd_signalcnd_broadcast信号,或者直到达到time_point指向的基于TIME_UTC的时间点,或者直到发生虚假唤醒。在函数返回之前,互斥锁再次锁定。

返回值

thrd_success如果成功,thrd_timedout在锁定互斥锁之前是否达到超时时间,或者如果发生错误,则thrd_error

当发生虚假唤醒时,函数会返回thrd_success还是thrd_error

尽管据我所知,从技术上讲,虚假唤醒并不被视为错误。

如果cnd_timedwait能看出唤醒是虚假的,它就不会这样做。它不会为了捉弄你而做虚假的唤醒。发生这些情况是因为条件的值可以在计划唤醒之后但在唤醒线程设法执行任何操作之前更改。

由于cnd_timedwait无法判断回报是否虚假,因此它的返回值无法反映这一事实。这是正常的成功回归。您的第一个任务是验证条件。

最新更新