2013-12-08 128 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

相關問題