以编程方式禁用多核

时间:2010-03-04 07:27:49

标签: c++ c window core multicore

有没有办法在Windows上禁用多核功能,只使用C / C ++使用单核?任何允许它的库? 我的应用程序访问我们用于与主机通信的芯片模块之一。我们怀疑其他人正在访问此模块并进行更改。奇怪的是,它只发生在多核系统(Windows 7 64位)上,当你设置windows只使用一个核心(How to disable a core)时,一切都很好。

对我来说,Windows不应该允许任何程序以编程方式完成它,但我希望我错了。

编辑:我不是在寻找重新调整线程技能的建议。我的问题可能是更多硬件或固件相关(也许第二个核心也在访问我的芯片模块)。

第二次编辑:这是 NOT 一个软件问题!我只想知道是否可以使用C \ C ++禁用多核。我不寻求线程建议,因为我100%确定问题不存在。

第3次编辑:问题已解决。问题在于我的客户运行的另一个进程,即访问我的应用程序访问的同一共享内存。 正如我之前提到的,我的线程没有问题,我从来没有得到我寻找的答案:关于天气的简单是或否可以使用C ++禁用其中一个核心。 在我的特殊情况下,处理器关联性没有帮助。

5 个答案:

答案 0 :(得分:2)

我认为一些解决方法可能是为一个核心设置任务主线程的亲和力,而不是为其他核心创建具有无限循环的线程,并为它们设置最高优先级。但是,如果软件不能在多核硬件上运行,通常会出现错误。

答案 1 :(得分:1)

即使在单核上,您也可以在任何时候中断。所以我怀疑你的问题是由于切换核心。

答案 2 :(得分:1)

如果您怀疑硬件驱动程序不是线程安全的,请使用以下命令设置中断关联。

http://www.microsoft.com/whdc/system/sysperf/intpolicy.mspx

答案 3 :(得分:0)

除非您的C / C ++库使用线程,否则我无法想象内核数量如何影响运行时行为。如果您的应用程序确实使用了线程,那么它们在一个核心与多个核心上的执行可能略有不同,但如果您在多核系统上遇到错误,则可能会在单核心系统上遇到相同的错误。

启动应用程序时,您可以set processor affinity。这会将您的应用程序锁定到一个处这可能是解决问题的简单方法。

答案 4 :(得分:0)

多线程是一种野兽。即使是“万无一失”,有时也会把你咬在......呃......“回来”。

当你使用线程时,你应该这样做,因为操作系统只有一些必须遵循的规则,并且可以根据需要安排你的线程。 IIRC您可以设置优先级等,也可以表达某些操作系统中某些CPU的首选项。

即使你只使用一个额外的线程,你仍然有两个,因为主应用程序也运行。

也许看一下专门研究线程调试的调试工具。也许他们可以帮助你。

首先,我会添加一些访问该模块的互斥锁或同步区域。