我想知道,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