【问题标题】:QueryPerformanceCounter and thread safetyQueryPerformanceCounter 和线程安全
【发布时间】:2008-12-30 18:29:54
【问题描述】:

我正在考虑在将同时处于活动状态的两个线程中对 QueryPerformanceCounter 进行重复调用(旋转)。我不确定这是否真的是一个问题,因为我没有看到任何关于它的文章,但是 QueryPerformanceCounter 线程安全吗?

谢谢

【问题讨论】:

    标签: windows multithreading performancecounter


    【解决方案1】:

    这取决于您对 QueryPerformanceCounter 的参数所在的位置。如果它是两个线程之间的共享变量,那么听起来该函数不是线程安全的。

    因此,我建议每个线程都有自己的LARGE_INTEGER 以传递给您对 QPC 的调用。每个调用都相互独立,应该适当地更新各自的LARGE_INTEGERs。

    如果您处于多处理器环境中,此函数上的 MSDN article 还会提示 setting an affinity mask。

    【讨论】:

      【解决方案2】:

      我正在考虑重复 调用(旋转)到 QueryPerformanceCounter 在两个线程中 将同时处于活动状态。

      哎呀。想想你在做什么以及有多少处理器可用。如果您有一个处理器,这将不起作用:它们不能“同时处于活动状态”,因为 QueryPerformanceCounter 不会将控制权从一个线程交给另一个线程。我相当确定单处理器的 win32 中的线程切换具有大约 1 毫秒的时间粒度。

      如果您有多个处理器,则可能会得到错误的结果(理论上——我没有多处理器 PC,所以我自己没有观察到这一点)。更多关于 QPC 的有趣讨论可以在互联网上找到(例如,参见 Raymond Chen's 博客)

      如果您真的想通过旋转等待来优化时间,我建议您在有此类专家的游戏编程论坛之一上询问最佳方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-09
        • 2014-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多