线程在什么指令之后迁移到另一个逻辑处理器?

After what instruction the thread migrates to another logical processor?

提问人:Kudor 提问时间:11/16/2023 最后编辑:user17732522Kudor 更新时间:11/16/2023 访问量:110

问:

我想知道在程序执行流程中的哪个点(更准确地说,在什么指令之后),线程从逻辑处理器 0 迁移到逻辑处理器 1。我用来设置所需的逻辑处理器。SetProcessAffinityMask()

我尝试通过所有线程设置在逻辑处理器 0 上运行,并在线程函数内部,当线程运行时,更改关联掩码并再次调用,以使线程在逻辑处理器 1 上运行。它有效,因为我使用的打印件使用 .我假设线程在我使用 的第二次调用后更改了逻辑处理器,但我不确定。SetProcessAffinityMask()SetProcessAffinityMask()GetCurrentProcessorNumber()SetProcessAffinityMask()

代码如下:

#include <Windows.h>
#include <iostream>
#include <pthread.h>

using namespace std;

void* tmgr_function(void* arg)
{
    HANDLE process = GetCurrentProcess();
    DWORD_PTR processAffinityMask = 1;
    BOOL success = SetProcessAffinityMask(process, processAffinityMask);
    
    printf("Thread runs on core %d\n", GetCurrentProcessorNumber());
    processAffinityMask = 2;

    success = SetProcessAffinityMask(process, processAffinityMask);
   
    printf("Thread runs on core %d\n", GetCurrentProcessorNumber());
    
    return NULL;
}

int main()
{
    pthread_t thread;
    int arg;
    
    long sum = 0;
    
    pthread_create(&thread, NULL, tmgr_function, &arg);
    pthread_join(thread, NULL);
    
    return 0;
}
C++ Windows WinAPI pthreads

评论

0赞 user17732522 11/16/2023
Pthreads 和 Windows 混合使用?
0赞 Kudor 11/16/2023
@user17732522 是的,因为我熟悉 pthreads,但我需要 Windows 的逻辑处理器管理功能。
1赞 Ulrich Eckhardt 11/16/2023
在 Windows 上,pthread 库只是现有 Windows API 函数的包装器,没有必要使用它,甚至可能适得其反。
0赞 500 - Internal Server Error 11/16/2023
线程从一个内核到另一个内核的实际迁移可能是在第三个内核线程上处理的,以响应第二个调用,这实质上是禁止线程进入内核 1。SetProcessAffinityMask
0赞 RbMm 11/16/2023
在 SetProcessAffinityMask 内部,那又怎样?

答: 暂无答案