gpt4 book ai didi

c++ - localtime_r 应该是线程安全的,但在 Valgrind DRD 中导致错误

转载 作者:行者123 更新时间:2023-11-30 04:38:38 27 4
gpt4 key购买 nike

我尽可能多地搜索谷歌,但找不到任何好的答案。

localtime_r 应该是一个用于获取系统时间的线程安全函数。但是,当使用 Valgrind --tool=drd 检查我的应用程序时,它始终告诉我此函数存在数据竞争条件。常见的搜索结果是在骗我,还是我只是遗漏了什么?用互斥量包围每个 localtime_r 调用似乎效率不高,特别是如果它首先应该是线程安全的。这是我的使用方式:

timeval handlerTime;
gettimeofday(&handlerTime,NULL);

tm handlerTm;
localtime_r(&handlerTime.tv_sec,&handlerTm);

有什么想法吗?

最佳答案

如果documentation说它是可重入(因此线程安全),那么它就是。

如果代码(不是您的代码)中存在错误并且该函数不是真正的线程安全,您将无能为力(除非使用其他函数) ,并且您不能在代码中修复这个问题:函数必须按照记录的方式运行。

但是,我会小心 valgrind 给出的结果。这是一个很棒的工具,我经常使用它。但有时,这只是错误。对于像检测竞争条件这样困难的事情,我会更加小心它所说的内容。特别是关于一个已经使用了几十年的标准函数。

我的建议是:忽略它。如果您遇到问题并认为 localtime_r() 对此负责,请写信给相应的邮件列表以报告问题,和/或使用其他功能。

与此同时,您应该会没事的。

关于c++ - localtime_r 应该是线程安全的,但在 Valgrind DRD 中导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3059946/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com