【问题标题】:SethreadAffinityMask() correct usage?SethreadAffinityMask() 正确用法?
【发布时间】:2011-07-25 00:09:45
【问题描述】:

我有 1500 个线程..我希望它们在 12 个处理器上运行... 为此,我打电话 SetThreadAffinityMask(GetCurrentThread(),1<<(threadnum%numprocessors));其中处理器数 = 12。 口罩的使用正确吗? 它需要可扩展,也就是说,如果我希望它仅在 11 个处理器上运行,那么 SetThreadAffinityMask(GetCurrentThread(),1<<(threadnum%numprocessors)); 其中 numprocessors=11。

【问题讨论】:

    标签: c++ multithreading affinity setthreadaffinitymask


    【解决方案1】:

    没错。

    但出于性能和效率的原因,我建议您以某种方式更改线程模型,使线程数等于 CPU 执行核心的数量,然后这些线程在您的 1500 个任务/工作项上工作,这些任务/工作项由您的“任务管理器”。

    如果不想创建自己的“任务管理器”,可以使用windowsThreadPool API,将任务分配给O/S管理的“线程池”

    【讨论】:

      【解决方案2】:

      从语法上讲 SetThreadAffinityMask(GetCurrentThread(),1

      【讨论】:

        猜你喜欢
        • 2012-08-01
        • 2012-03-08
        • 1970-01-01
        • 1970-01-01
        • 2011-02-10
        • 2021-10-16
        • 1970-01-01
        • 2020-08-03
        • 1970-01-01
        相关资源
        最近更新 更多