首页
社区
课程
招聘
while(TRUE){InterlockedCompareExchange(...);} 多核CPU占率
发表于: 2015-8-21 19:35 4002

while(TRUE){InterlockedCompareExchange(...);} 多核CPU占率

2015-8-21 19:35
4002
  long aloc = 10;
  while(TRUE)
  {
    InterlockedCompareExchange(&aloc, 1, 10);
  }

今天注意到 cmpxchg 指令, 然后想到无限循环此指令应该会导致多核CPU占用率全100%。
然后如上一试, 双核CPU每个增加约50%。
呃, 什么原因?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
想用无限循环此指令应该会导致多核CPU占用率全100%,这是不可能的.
lock指令只是锁住内存总线,导致多核运行的其他核心不能访问内存,但是其他核心可以运行很多不需要访问内存
的指令,所以不可能锁住其他核心的.
2015-8-21 20:02
0
雪    币: 11
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
受教了。 不知双核CPU每个增加50%, 这个正常吗? 我是Dialog点Button然后无限循环的
2015-8-22 09:20
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
那是调度程序在不停的换内核运行你的程序,如果是1个核不停的运行,就是1个核100%,另一个核0,而如果二个核轮流执行你的程序,就是每个核50%。
2015-8-22 17:36
0
雪    币: 11
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
完美解决, 谢谢
2015-8-22 18:54
0
游客
登录 | 注册 方可回帖
返回
//