测量 C++ 多线程程序中的运行时间
measure elapsed time in c++ multithreaded program
我有一个用于C++跳棋游戏的AI Minimax代码。在这种情况下,主程序在休眠 5 秒时调用我在新线程中编写的函数,然后返回主程序
int flag = 0 ;
void execute(){
hThread = ( HANDLE ) _beginthread( myfunction ) ;
sleep( 5000 );
if(flag == 1) // Do some work
}
Outputval myfunction(...) {
clock_t start = clock() ;
while( double(clock() - start)/CLOCKS_PER_SEC < 4 ) { //CLOCKS_PER_SEC = 1000
//DO SOME WORK
}
flag = 1;
return somevalue ;
}
我的问题是,虽然在我的函数中完成的工作需要大约 3-4 秒,但每次迭代后计算的时间是 0-1 秒的数量级。因此,即使 4 秒过去并且未设置标志,myfunction 中的循环也会继续运行我也用过 time() 函数 - 它给出了同样的问题。
不是答案,而是"警告":
假设您的变量标志是全局的并且在两个线程中都可见。由于至少一个访问不是原子的(C++11)或标志不是易失性的(C++03),因此您的代码包含"数据竞争",这将触发"未定义的行为"。未定义的行为为编译器提供了广泛的优化机会:
编译器将按如下方式优化您的代码:
从以下开始:
int flag = 0 ;
void execute{
hThread = ( HANDLE ) _beginthread( myfunction ) ;
sleep( 5000 );
if(flag == 1) // Do some work
}
它最终可能会创建以下代码:
constexpr int flag = 0 ;
void execute{
hThread = ( HANDLE ) _beginthread( myfunction ) ;
sleep( 5000 );
if(0) {}// Never do anything
}
您的代码还有其他问题。我建议完全重新设计。
相关文章:
- 用时钟测量程序的运行时间
- 我的 c++ 应用程序中的运行时间从 0 增加到 60 太快了(例如一毫秒或一微秒)
- 如何执行用 C++ 编写的程序的运行时间?
- 如何优化C++键值程序以获得更快的运行时间
- 同一程序的运行时间差异很大,有时达到1000+us
- 测量 OpenCL 应用程序的运行时间
- 如何修复数据库连接的C 程序运行时间错误(0xc0000005)
- 如何在以下C程序中计算运行时间内存和最大数据存储器使用情况
- 使用Clock()函数测量程序的运行时间
- 对于长时间运行的程序,STL 内存管理是否"reliable"?
- 测量 C++ 多线程程序中的运行时间
- 运行时间错误:程序跳过提示,以获取第二名和第三个名称
- 将一个大文件加载到内存中并在程序的所有运行时间内保持它是错误的
- 如果你以root用户身份运行这个C++程序,为什么它要花这么长时间才能完成
- 为什么我的C++程序使用的系统时间比运行时间多
- 与linux相比,cygwin中的c++程序运行时间较长
- 如何分析程序运行时间
- 计算并行程序的运行时间和cpu时间
- 如何为长时间运行的程序执行文件输出
- 使用 Unix 程序时间计算每次迭代的程序运行时间