首页
社区
课程
招聘
[求助][求助]单核cpu, 旋转锁的使用真有问题吗?
发表于: 2014-8-23 19:42 4509

[求助][求助]单核cpu, 旋转锁的使用真有问题吗?

2014-8-23 19:42
4509
bool g_flag = false;

线程函数
{

while( interlockedexchange(&g_flag, true) == true))
sleep(0);

//access resources

interlockedexchange(&g_flag, false);

}

在核心编程  8.1 节 作者提到, 如果在单核下 ,一个线程不停的旋转,会阻止另一个线程去修改
g_flag。

请问什么原因会阻止修改?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
单核根本没必要自旋锁
2014-8-23 21:00
0
雪    币: 54
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你好,我是看到书本提到 spinlock

所以才问,是不是会有问题?
2014-8-23 21:14
0
雪    币: 200
活跃值: (38)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
倒不是阻止修改,应该说效率会降低。sleep(0)就是为了主动让出时间片
2014-8-23 21:18
0
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
spinlock我记得有一个wait标志位用来同步的。然后在单核时wait=return,具体代码得找一下wrk,
2014-8-23 22:28
0
雪    币: 165
活跃值: (1486)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
由于CPU的任务执行是抢占式的,单核的spinlock只是提升LEVEL之后避免被其他任务切换,因此处理代码必须要简练,否则会影响整个系统的性能
2014-8-24 08:55
0
雪    币: 54
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
你说的是另一个话题了,

有点跑题了。

我发帖讨论的是:

为什么单核下的旋转锁会导致阻止另一个线程修改锁。
2014-8-24 13:00
0
雪    币: 54
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
两种方式:
1.
while(interlockedexchagne(&g_flag, true) == true)
sleep(0);

2.
while(interlockedexchagne(&g_flag, true) == true); //空循环

第2种效率更低, 两种方式在单核下,都不会 阻止 另一个线程去修改 锁。
2014-8-24 13:15
0
游客
登录 | 注册 方可回帖
返回
//