- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尽可能多地搜索谷歌,但找不到任何好的答案。
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/
我正在运行 drd 来捕捉一些遗留代码中的数据竞争。我知道 drd 适用于段而不是单个指令,我希望在 Other segment start 的调用堆栈和Other segment end,但这个不是
看起来像Valgrind有两个工具都可以进行线程错误检测:Helgrind和 DRD .这些工具非常相似。 我的主要问题是:我什么时候应该使用一个而不是另一个来检查我的多线程代码? 更广泛地说,为什么
我尽可能多地搜索谷歌,但找不到任何好的答案。 localtime_r 应该是一个用于获取系统时间的线程安全函数。但是,当使用 Valgrind --tool=drd 检查我的应用程序时,它始终告诉我此
当我将我的代码转换为 C++11 时,我非常想将我的 pthread 代码转换为 std::thread。但是,我似乎在 drd 和 helgrind 中的非常简单的程序中遇到了错误的竞争条件。 #i
我在让 Helgrind 和 DRD 使用 g++ 和 C++11 线程时遇到问题。 我的设置: - RedHad Linux 2.6 -克++ 4.7.2 - Valgrind 3.7.0 我试过贴
考虑以下代码: #include #include #include #include struct counter { counter() { } size_
我是一名优秀的程序员,十分优秀!