我正在使用 valgrind 运行多线程套接字程序。客户端将通过 TCP 向服务器发送请求,然后忙于等待布尔值。当调用服务于服务器响应的回调函数时,将设置该布尔值。一旦收到响应(并且设置了布尔标志),服务器将再次发出请求,并在循环中重复执行此操作。
我意识到对共享变量(布尔值)的非同步访问可能会导致线程问题,但我尝试使用 pthread 互斥体,程序速度减慢了大约 20%(速度在这里很重要)。我确信写入共享布尔变量是可以的,因为它可以在一个周期内完成。
该程序在 valgrind 之外运行良好,但在使用 valgrind 运行时经常会停止。我让程序运行过夜......通常需要几秒钟才能完成,所以我不认为这是没有等待足够长的时间来完成程序的情况。线程由开源引擎框架管理(快速修复),所以我不认为线程的创建/管理方式有问题。
有谁知道 valgrind 围绕多线程程序/繁忙的等待循环/套接字通信(或这些的组合)有任何问题吗?
我刚刚遇到了类似的问题。就像OP一样,我有一个线程正在忙等待。就我而言,问题在于繁忙的等待占用了几乎所有的 CPU 周期,并导致其他线程的运行速度慢了数千倍。起初我通过放置一个来解决这个问题usleep(1)
在繁忙的等待循环中(仅适用于Valgrind
构建)。然后我读了Valgrind
手册并了解到--fair-sched=yes
选项,这也解决了问题并允许我删除usleep(1)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)