2013-12-08 74 views
1

是否有可能在多处理器环境(PC)中将一个Windows进程配置为仅在一个处理器上运行(亲和性掩码= 1或SetProcessAffinityMask(GetCurrentProcess(),1)),但其线程是否在其他处理器上生成?只能在一个处理器上进行运行只能在其他处理器上运行线程吗?

(问题来自于讨论一个公司开始,使用同步对象(事件,互斥,信号)和WinAPIs,像WaitForSignleObject有关,等等,特别是SignalObjectAndWait为此MSDN指出

“注意”信号“和‘等待’,不能保证作为原子操作来执行 。线程 主叫SignalObjectAndWait开始在第二对象上其等待之前在其他处理器上执行线程可以 观察所述第一对象的所述信号状态”

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

P.S. Windows上下文切换有什么区别,有多个处理器或单核处理器与更多真实核心?

P.P.S.请耐心等待这个问题,如果我没有使用确切的和具体的条款 - 这对我来说仍然不是很好。

+0

“亲和力掩码= 00”没有什么帮助记录您的问题。 –

+0

好吧,让它成为1,我会更新问题。 – ALZ

回答

2

该组处理器的内核号线程可以运行在是处理亲和力掩模和螺纹亲和力掩码的交叉点。

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

对于你的后续问题:如果它不是原子的,它不是原子的。共享一个核心的线程有额外的保证,因为抢占遵循某些规则,但它们非常复杂,因为相对优先级和动态优先级是线程调度的重要因素。由于复杂性,最好使用适当的同步。值得注意的是,同等优先级的线程之间的竞争条件当然仍然存在于单个核心(或单核心受限制)系统上,但它们的频率要低得多,因此更难以找到和调试。

0

是否有可能,在多处理器环境中(PC)的一个窗口过程被配置为仅在一个处理器上运行(亲和力掩码= 1或SetProcessAffinityMask(GetCurrentProcess(),1)),但它的螺纹产卵上其他处理器?

  • 如果没有设置CPU的亲和力只有一个核心,一个进程可以在多个核上运行?
  • 进程和线程有什么区别?
  • 线程可能有进程或进程可能有线程?
  • 可以从线程的角度来看过程还是反过来?
  • 什么是原子概念?
  • 当数字1可以看作是多维单位?
  • 我们可以分1/0(零)吗?我们什么时候可以或不可以?

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

一个cpu:你还记得吗?跑跑并留驻?好时光! 然后Unix的:多,多线程等等:)

注:

你不能提出一个问题,不知道这个问题的答案。
试着问一些你不认识的东西,那是不可能的!你问,因为你有一个答案。看看你的问题。答案很明显。 :)

+0

在这里,我发现更多的问题比答案 – ALZ

+0

[[Answer](http://www.youtube.com/watch?v=G1k3jCPdkU8)]没有问题的aswers怎么办? :) – 2013-12-10 13:27:27

相关问题