Windows 仅在一个处理器上运行的进程是否可以在其他处理器上运行线程?
在多处理器环境(PC)中,是否可能将一个windows进程配置为仅在一个处理器上运行(关联掩码=1或Windows 仅在一个处理器上运行的进程是否可以在其他处理器上运行线程?,windows,multithreading,synchronization,multiprocessing,Windows,Multithreading,Synchronization,Multiprocessing,在多处理器环境(PC)中,是否可能将一个windows进程配置为仅在一个处理器上运行(关联掩码=1或SetProcessAffinityMask(GetCurrentProcess(),1)),但其线程会在其他处理器上生成 (问题来自于一家公司开始的讨论,关于使用同步对象(事件、互斥体、信号量)和WinAPI,如WaitForSignalObject等,特别是MSDN声明的SignalObjectAndWait) 请注意,不保证执行“信号”和“等待” 作为一种原子操作,在其他处理器上执行的线程可
SetProcessAffinityMask(GetCurrentProcess(),1)
),但其线程会在其他处理器上生成
(问题来自于一家公司开始的讨论,关于使用同步对象(事件、互斥体、信号量)和WinAPI,如WaitForSignalObject
等,特别是MSDN声明的SignalObjectAndWait
)
请注意,不保证执行“信号”和“等待”
作为一种原子操作,在其他处理器上执行的线程可以
观察线程前第一个对象的信号状态
调用SignalObjectAndWait开始对第二个对象的等待“
这是否意味着对于单处理器,它保证是原子的
另外,对于Windows上下文切换,多处理器或单处理器具有更真实的内核有什么区别吗
p.p.S.如果我没有使用准确和具体的术语,请耐心回答这个问题-这对我来说还不是很清楚。否
线程可以运行的处理器内核集是进程关联掩码和线程关联掩码的交集
要获得您描述的行为,可以为主线程设置线程关联掩码,而不要弄乱进程掩码
下面的问题是:如果它不是原子的,那么它就不是原子的。共享一个核心的线程还有额外的保证,因为抢占遵循某些规则,但它们非常复杂,因为相对优先级和动态优先级是线程调度中的重要因素。由于复杂性,最好使用适当的同步化
值得注意的是,在单核(或单核受限)系统上,具有相同优先级的线程之间的争用条件肯定仍然存在,但它们的频率要低得多,因此更难找到和调试
在多处理器环境(PC)中,是否可能将一个windows进程配置为仅在一个处理器上运行(关联掩码=1或SetProcessAffinityMask(GetCurrentProcess(),1)),但其线程会在其他处理器上生成
- 如果不将cpu关联性设置为仅一个核心,那么一个进程可以在多个核心上运行
- 进程和线程之间有什么区别
- 线程可以有进程,或者进程可以有线程
- 可以从线程的角度或相反的角度来看待这个过程吗
- 什么是原子概念
- 当数字1可以被视为多维单位时
- 我们能把1/0除以零吗?什么时候能
试着问一些你不知道的事情,那是不可能的!你问是因为你有答案。看看你的问题。答案显而易见
“affinity mask=00”对记录您的问题几乎没有帮助。好的,让它为1,我将更新问题。在这里,我发现的问题多于答案[]没有问题的提问者如何?:)