gpt4 book ai didi

windows - 仅在一个处理器上运行的进程是否可以在其他处理器上运行线程?

转载 作者:可可西里 更新时间:2023-11-01 11:54:39 24 4
gpt4 key购买 nike

在多处理器环境 (PC) 中,是否可能将一个 Windows 进程配置为仅在一个处理器上运行(affinity mask = 1 或 SetProcessAffinityMask(GetCurrentProcess(),1)),但它的线程在其他处理器上生成?

(问题来自一家公司开始的讨论,关于使用同步对象(事件、互斥体、信号量)和 WinAPI,如 WaitForSignleObject 等,尤其是 SignalObjectAndWait MSDN 状态

"Note that the "signal" and "wait" are not guaranteed to be performed as an atomic operation. Threads executing on other processors can observe the signaled state of the first object before the thread calling SignalObjectAndWait begins its wait on the second object"

这是否意味着对于单处理器它保证是原子的?

附言Windows Context Switching 有多个处理器或具有更多实际内核的单个处理器有什么区别吗?

P.P.S.如果我没有使用准确和具体的术语,请耐心回答这个问题 - 这对我来说仍然不是很了解。

最佳答案

没有。

线程可以运行的处理器核心集是进程关联掩码和线程关联掩码的交集。

要获得您描述的行为,可以为主线程设置线程关联掩码,而不是弄乱进程掩码。

对于您的后续问题:如果它不是原子的,它就不是原子的。线程共享一个核心还有额外的保证,因为抢占遵循一定的规则,但是它们非常复杂,因为相对优先级和动态优先级是线程调度的重要因素。由于复杂性,最好使用适当的同步。

值得注意的是,在单核(或单核限制)系统上,相同优先级线程之间的竞争条件肯定仍然存在,但它们的发生频率要低得多,因此更难发现和调试。

关于windows - 仅在一个处理器上运行的进程是否可以在其他处理器上运行线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20455254/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com