免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 33272 | 回复: 55

谁能解释一下,自旋锁spinlock [复制链接]

论坛徽章:
0
发表于 2005-11-02 16:58 |显示全部楼层
spinlock到底是什么锁?
谁能讲解一下么
thanks

论坛徽章:
0
发表于 2005-11-02 17:53 |显示全部楼层
factly, spinlock is useful only on SMP machine

论坛徽章:
0
发表于 2005-11-02 18:56 |显示全部楼层
???
怎么和我理解的不太一样?
单CPU不能用?
能否说说SPINLOCK的原理呢
谢谢

论坛徽章:
0
发表于 2005-11-02 21:56 |显示全部楼层
spinlock 用于CPU同步, 它的实现是基于CPU锁定数据总线的指令.
当某个CPU锁住数据总线后, 它读一个内存单元(spinlock_t)来判断这个spinlock 是否已经被别的CPU锁住. 如果否, 它写进一个特定值, 表示锁定成功, 然后返回. 如果是, 它会重复以上操作直到成功, 或者spin次数超过一个设定值. 锁定数据总线的指令只能保证一个机器指令内, CPU独占数据总线.
单CPU当然能用spinlock, 但实现上无需锁定数据总线.

论坛徽章:
0
发表于 2005-11-02 23:04 |显示全部楼层
spinlock在锁定的时候,如果不成功,不会睡眠,会持续的尝试,单cpu的时候spinlock会让其它process动不了.

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2005-11-02 23:11 |显示全部楼层
在书上抄的,我也不懂。

自旋锁是一种保护数据结构或代码片段的原始方式,
在某个时刻只允许一个进程访问临界区内的代码。

论坛徽章:
0
发表于 2005-11-03 03:06 |显示全部楼层
原帖由 柳五随风 于 2005-11-2 23:04 发表
spinlock在锁定的时候,如果不成功,不会睡眠,会持续的尝试,单cpu的时候spinlock会让其它process动不了.

一般spinlock实现会有一个参数限定最多持续尝试次数. 超出后, spinlock放弃当前time slice. 等下一次机会.

论坛徽章:
0
发表于 2005-11-03 03:14 |显示全部楼层
原帖由 lenovo 于 2005-11-2 23:11 发表
在书上抄的,我也不懂。

自旋锁是一种保护数据结构或代码片段的原始方式,
在某个时刻只允许一个进程访问临界区内的代码。

用户空间, 应当是进程内只允许一个线程访问临界区内的代码.
内核进程共享地址空间, 进程之间互斥是没错.

论坛徽章:
0
发表于 2005-11-03 08:24 |显示全部楼层
有三果问题不清楚
1,单CPU内核中,假设好几个内核线程用spinlock共享一块数据,一个时间只有一个线程得到锁,那是不是其它没有得到锁的线程都在疯狂的自旋中?

2,内核里似乎到处都有spinlock,在单CPU系统下spinlock主要用来做什么呢?也能用来当数据同步的锁来用?

3,用户空间有spinlock吗?

论坛徽章:
0
发表于 2005-11-03 09:37 |显示全部楼层
原帖由 bleem1998 于 2005-11-3 08:24 发表
有三果问题不清楚
1,单CPU内核中,假设好几个内核线程用spinlock共享一块数据,一个时间只有一个线程得到锁,那是不是其它没有得到锁的线程都在疯狂的自旋中?

2,内核里似乎到处都有spinlock,在单CPU系统下 ...


1. Yes. 但spinlock只适用于short lock.

2. 单CPU, 或SMP, 都是同步锁

3. Yes
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP