miko

miko

1个粉丝

20

问答

13

专栏

11

资料

miko  发布于  2022-10-27 16:26:23
采纳率 0%
20个问答
不想加班~~~~
1016

Hi2516DV300芯片平台下condition_variable超时等待的问题

 

【问题描述】:

使用c++11标准中的std::condition_variable,当使用wait_for/wait_until等待超时,此时往前调整系统时钟,可造成wait_for/wait_until等待异常;如:wait_for等待3秒,此时系统时间往前调整10分钟,可造成wait_for在10分3秒后才会退出,从而对软件代码逻辑造成影响。具体参考测试见附件test.cpp。超时时间应该不受系统时间影响,我们在其他平台测试过,见最后的横向对比测试。

编译指令为:arm-himix200-linux-g++ -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -fno-aggressive-loop-optimizations —std=c++11 -Wall -pthread -lm -ldl test.cpp

【所处环境】:

1.先运行程序

2,输入测试指令

~ # date
Thu Jan 1 01:19:23 UTC 1970
~ # date -s “01:18:23”
Thu Jan 1 01:18:23 UTC 1970

【初步分析】:

时间向前调整,std::condition_variable就会卡住,然后等到时间回到当前之后,std::condition_variable才能正常

【定位信息】:

其他平台横向测试对比:

平台:3516Av100

编译器:arm-hisiv300-linux-g++

测试结果:向前调整时间不会对状态变量的等待时间有任何影响;
平台:3519V101
编译器:arm-hisiv500-linux

测试结果:向前调整时间不会对状态变量的等待时间有任何影响;

复现条件:将系统时间向前调整

我来回答
回答2个
时间排序
认可量排序

david

11个粉丝

42

问答

28

专栏

58

资料

david 2022-10-30 11:12:01
认可0

bool wait_for( std::unique_lock& lock,
const std::chrono::duration& rel_time,
Predicate pred);

首先3s的等待是否合理?
也是由于调度竞争,duration 理论设置应该足够小,不然wait到的永远比预想的要大。

using jiffies = std::chrono::duration;
由于调度,此函数阻塞 比设定的 timeout_duration长。

比如设置如下:
for(i=0;i<5;i++)
{
cd = wait_for(100ms)
{
…..
}
}

david

11个粉丝

42

问答

28

专栏

58

资料

david 2022-10-30 11:14:51
认可0

rel_time 采用相对时钟。
或者
using jiffies = std::chrono::duration;

或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区