GCC 4.9.2 / GCC 4.8.1 - std::condition_variable::wait_until(
GCC 4.9.2 / GCC 4.8.1 - std::condition_variable::wait_until(...) bug?
我在C 11条件变量上的方法wait_until有问题。看起来该方法返回std :: cv_status :: no_timeout即使没有通知。下面的代码显示了问题。
下面的代码中有评论说明了问题。
使用的编译器:GCC 4.9.2(在Arch Linux上) GCC 4.8.1(在Ubuntu 14.04上)
我很高兴能为此解决任何帮助。
最佳瑞马,垫子
#include <iostream>
#include <atomic>
#include <condition_variable>
#include <mutex>
#include <thread>
#include <chrono>
std::mutex m;
std::condition_variable v;
void test_wait_until(int ms)
{
std::unique_lock<std::mutex> lock(m);
std::cout << ms << "ms startn";
auto expires = std::chrono::system_clock::now() + std::chrono::milliseconds(ms);
bool run = true;
do
{
// This loop will run at 100% cpu time until
// the timeout expires.
auto status = v.wait_until(lock, expires);
if(status == std::cv_status::timeout){
std::cout << ms << "ms expiredn";
run=false;
}
if(status == std::cv_status::no_timeout){
// If the commend below is removed the
// termial will be filled by the printout.
// until the timeout expires.
//std::cout << ms << "ms did not expiren";
}
}while(run);
}
int main()
{
test_wait_until(20000);
test_wait_until( 5000);
test_wait_until( 100);
test_wait_until( 100);
test_wait_until( 10);
test_wait_until( 0);
test_wait_until( -10);
test_wait_until( -100);
test_wait_until( -100);
test_wait_until( -5000);
test_wait_until(-20000);
}
您可能需要使用线程支持构建可执行文件。在带有GCC 4.9.2的Linux上,这将是这样的:
g++ -std=c++11 test.cpp -o test -pthread
好的问题是:I/我们使用的是-lpthread选项,而不是gcc的-pthread选项。
奇怪的是其他事情效果很好,但是这是解决方案的接缝。
谢谢大家!
相关文章:
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 奇怪的结构&GCC&clang(void*返回类型)
- GCC本机矩阵运算库
- PowerPC ppc64le上的Gcc Woverloaded虚拟错误
- gcc和c++17的过载解析失败
- 数据成员SFINAE的C++17测试:gcc vs clang
- GCC对可能有效的代码抛出init list生存期警告
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 为什么与常规GCC不同,即使有"学究性错误",MinGW-GCC也能容忍丢失的返回类型
- 使用gcc从静态链接的文件中查找可选符号
- 普通环路未使用gcc 4.8.5自动矢量化
- 有了gcc,是否可以链接库,但前提是它存在
- 在clang++预处理器中确定gcc工具链版本
- 为什么 gcc 编译这个而 msvc 没有
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 我可以检测和更改 gcc/g++ 中结构的当前数据对齐设置吗?
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- 如何使用Clang/GCC在Mac上为C/C++设置VSCode
- 一位朋友将模板函数缩写为clang和gcc