在C11中,cnd_timedwait函数定义如下:
int cnd_timedwait( cnd_t*限制cond,mtx_t*限制互斥,const *限制time_point );
原子地解锁由互斥锁指向的互斥对象和cond指向的条件变量上的块,直到线程由cnd_signal或cnd_broadcast发出信号,或者直到到达time_point指向的基于TIME_UTC的时间点为止,或者直到出现虚假的唤醒。在函数返回之前,互斥锁再次被锁定。
返回值
如果成功,则为thrd_success,如果在锁定互斥对象之前已达到超时时间,则为thrd_timedout;如果发生错误,则为thrd_error。
当出现虚假的唤醒时,函数会返回thrd_success还是thrd_error?
虽然据我所知,虚假的唤醒在技术上并不是一个错误。
发布于 2020-01-02 14:07:28
如果cnd_timedwait能看出唤醒是虚假的,它就不会这么做。它不会做虚假的唤醒只是为了让你。之所以会发生这种情况,是因为条件的值在计划唤醒之后,但在唤醒线程设法执行任何操作之前,都可能发生变化。
因为cnd_timedwait不能判断返回是否是假的,所以它的返回值不能反映这一事实。这是正常的成功回报。您的第一项任务是验证条件。
https://stackoverflow.com/questions/59564596
复制相似问题