版块
论坛
喜欢
话题
应用
搜索
登录
注册
bjab的个人空间
访问量
0
新鲜事
帖子
资料
http://bbs3.driverdevelop.com/index.php?m=space&uid=21476
只能用spinlock来解决问题?
请问内核对象: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)
回复
zhangleierli
:
WQXNETQIQI 受教了
我还以为只有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)
回复
« 上一页
1
2
3
下一页 »
bjab
加关注
写私信
0
关注
0
粉丝
30
帖子
返回顶部