我在非常罕见的情况下看到pthread_cond_timedwait()返回EINVAL并导致系统崩溃.我知道这意味着传入的参数之一必须是无效的,但互斥锁或cond变量如何变为无效?
有没有办法在调用pthread_cond_timedwait()之前检查这些参数以防止崩溃?
Tan*_*ury 10
它没有被指定为exaclty什么构成无效,但这里有一些我观察到的pthread_cond_timedwait返回原因EINVAL:
如果没有手动模仿pthread正在进行的验证调用,那么我不知道在调用之前检查参数的方法pthread_cond_timewait().但是,pthread_cond_timewait()返回EINVAL不应该导致致命的崩溃,因为它是一个特定的情况.考虑检查可能无法正确处理返回结果的其他应用程序代码区域.例如,只要返回不成功,代码就会成功ETIMEDOUT.
小智 5
我想分享我在这个问题上的经验,时间值是'timespec',它的'tv_nsec'范围应该保持在[0, 999999999]内,因此如果你设置nano值超过1秒,一些linux可能会返回 EINVAL!
struct timespec {
time_t tv_sec; /* Seconds */
long tv_nsec; /* Nanoseconds [0 .. 999999999] */
};
Run Code Online (Sandbox Code Playgroud)
希望这能帮助你摆脱困境。
| 归档时间: |
|
| 查看次数: |
5007 次 |
| 最近记录: |