双核、超线程的CPU运行时会出错,为什么呀?解决方案

双核、超线程的CPU运行时会出错,为什么呀?
在程序中用:CreateThread(nil,0,@ThreadFire,nil,0,ThreadID);
在双核、超线程的CPU运行时会出错(通常会在运行1-2个小时后出错),
而单核和非超线程的CPU运行几十个小时都一切正常。

具体出错为:
“XXXXXXXX”内存,该内存不能为“read”。

其中:
ThreadFire是一个循环执行的过程。



------解决方案--------------------
运行时最好设置该线程的亲缘性。。。
这样可以确定该线程在哪个cpu里面跑


在多cpu、多核中,会随机的获得不同的序列号.
这就为我们根据cpu序列号来制作注册机带来了很大的麻烦。
Windows 2000/xp允许设置进程和线程的亲缘性。
换句话说,可以控制哪个C P U能够运行某些线程。这称为硬亲缘性。
Windows提供了设置亲缘性的函数SetProcessAffinityMask 。
使用它来控制获取指定cpu的序列号。

------解决方案--------------------
双核、超线程的CPU基本等同于多 cpu, 线程运行出问题一般都在同步上, 这时完全有可能一个线程操作中的某资源另一线程来读取
不要去怀疑双核、超线程有问题,从代码上找出线程非局部变量,检查下是否正确使用了临界