admin管理员组

文章数量:1599541

问题现象

目的是实现超时1分钟没有tcp socket连接,重新尝试进行连接,使用std::condition_variable 里面的wait_for( std::unique_lockstd::mutex, long time),结果函数返回状态为std::cv_status::timeout 超时返回还是正常通知notify_all返回。目前遇到是状态值不对,实际是超时返回但结果是通知返回。

分析解决

目前上述代码在PC端运行没有遇到过,但是后来编译移植到qnx平台上偶尔会出现上述现象,可能是不通环境下对条件变量实现不一致。网上查找资料发现有类似情况,比如虚假唤醒和唤醒丢失,但我遇到不像上述情况。最后处理就是避免使用wait_for来进行定时判断。或者使用wait_for带Period参数的版本。

本文标签: 数据结构状态平台QNXconditionvariable