我想知道,pthreads-win32(pthreads的windows實現)如何實現交叉線程?它是專門用Windows API編寫的嗎?我檢查了一些源代碼,似乎大多數確實是用windows API編寫的,我想知道它是否使用Windows調度程序在線程(和核心)之間切換,或者它是否實現它自己的?具體來說,現在大多數處理器都實現了自己的調度器(例如,我已經閱讀了關於itanium arch的內容,硬連線邏輯支持每個內核兩個線程,甚至可以通過hw邏輯在它們之間自動切換,所以很顯然OS支持多核並不一定需要),所以如果我有一個像Windows 32位或不支持多核處理器的過時操作系統,使用pthreads-win32編寫的程序仍然可以運行在多個處理器內核上,或者只運行一個內核用過的?pthreads如何進行交叉線程和調度
pthreads實現(untainted posix線程)如何?即使它們運行的操作系統不支持多核處理器嗎?
我猜測答案是否定的,對於windows和posix版本,如果操作系統不支持多核,那麼只有一個內核正在使用。這只是一個受過教育的猜測,我想確認一下,所以請留下評論。
在一個方面的請求,你可以推薦一個支持多核心線程執行的lib,即使程序運行的OS不是。如果有任何c。
另外,有沒有一種方法可以確保使用pthreads寫入的兩個線程在不同的核心上執行,或者操作系統(或處理器或pthreads庫)是否自動執行分配? pthreads是否保證在不同內核上執行?
乾杯,纈氨酸
編輯: 我知道大多數的這些問題,是實現特定的,所以我指的是這個實現並行線程的窗戶http://sourceware.org/pthreads-win32/。我之前沒有具體提及它,因爲據我所知,這是Windows中最流行和廣泛使用的pthreads實現。
大多數操作系統都提供了一種將線程固定到不同內核的方法。你可以使用pthread_setaffinity_np() – nos 2010-10-28 18:10:18
將一個特定的線程分配給一個核心。謝謝。你是對的,我正在傳播錯誤信息(在另一篇文章中發現)。 Linux確實提供了一種將線程固定到特定虛擬處理器(在特定條件下)的方法。實際上,我在sched_setaffinity()之前(來自sched.h)遇到過,它基本上做了同樣的事情,除了將整個進程固定到核心。無論如何,windows支持與SetThreadAffinityMask()類似的功能,很明顯,可以手動將線程分配到不同內核上並行運行(如果操作系統支持多內核)。我會在早上糾正我的上述帖子:) Greets – valekovski 2010-10-29 00:33:58