请问内核对象:Event(事件),Mutex(互斥量), Semaphore(信号灯)等是否不能用在多CPU场合,只能用spinlock来解决问题?
回复(22) 2008-01-12 16:22 来自版块 - 内核编程
表情
zzzevazzz引用第9楼bjab于2008-01-14 10:32发表的 : 我在内核线程中使用KeWaitForSingleObject等待KMutex对象,导致计算机重启动,但单CPU下运行正常,不知为什么?还望各位大侠指教。 用虚拟机自己调试一下看看啊。(2008-01-14 14:39)
zzzevazzz引用第7楼WQXNETQIQI于2008-01-12 22:59发表的 : 楼主想问应该是“如何在多CPU上不用SPINLOCK实现数据同步”才对吧? spinlock对效率有较大损耗,因此多CPU上尽量使用执行体资源或push lock~~ event只能用来做自己的线程...(2008-01-14 14:35)
bjab那么是说像mutex这样的内核对象也能用于多CPU多线程之间的同步?还有,执行体资源怎么用?(2008-01-14 11:38)
bjab我在内核线程中使用KeWaitForSingleObject等待KMutex对象,导致计算机重启动,但单CPU下运行正常,不知为什么?还望各位大侠指教。(2008-01-14 10:32)
rangzh视优先级而定吧 假如你需要同步的代码有一些可能在DISPATCH_LEVEL,那么就应该用SpinLock了(2008-01-13 20:21)
WQXNETQIQI楼主想问应该是“如何在多CPU上不用SPINLOCK实现数据同步”才对吧? spinlock对效率有较大损耗,因此多CPU上尽量使用执行体资源或push lock~~ event只能用来做自己的线程间的同步,只有执行体资源、PUSHLOCK或SPINLOCK才可以用做系统所有...(2008-01-12 22:59)
zzzevazzz唉,WQXNETQIQI 答非所问,还是我来说说吧。 Event之类的可等待内核对象完全可以用在多CPU上。 楼主的误解恐怕源于DDK文档片面强调SpinLock适用于多CPU这一点。 实际上SpinLock和Event不是一个层次的东西。前者主要用于保证原子操作,后者才是...(2008-01-12 22:26)
zhangleierliWQXNETQIQI 受教了 我还以为只有spin lock这东西能用于多CPU同步, (2008-01-12 22:07)
AlexSho引用楼主bjab于2008-01-12 16:22发表的 只能用spinlock来解决问题? : 请问内核对象:Event(事件),Mutex(互斥量), Semaphore(信号灯)等是否不能用在多CPU场合,只能用spinlock来解决问题? 这些在多核环境中都可以用。(2008-01-12 22:06)
WQXNETQIQI在WIN2000中微软大部分使用spinlock来解决同步问题 后来在XP中使用了push lock(支持读或写共享访问),使系统效率得到了较大提升,同时也不用提升到DPC level,不过push lock没有提供相应接口,驱动中的话,可以使用执行体资源,效果很好(2008-01-12 20:16)

返回顶部