ChinaUnix.net
相关文章推荐:

linux spinlock使用

前几天写的模块代码,发现读多写少,查了资料说是RCU比较适合这样的同步。 不过对RCU现还不太了解,我修改了部分代码 -- 只是读的部分,写操作部分目前不敢下手。 spin_lock_bh(&lock); read_code_fragment; spin_unlock_bh(&lock); /* 改为 */ rcu_read_lock_bh(); read_code_fragment; rcu_read_unlock_bh(); 我的问题是,这样改对吗? 还有就是,我发现内核代码有的地方是 在 read_lock_rcu() 里面还会使用 spin_lock这些...

by C.J - 内核源码 - 2009-01-05 11:32:38 阅读(3116) 回复(3)

相关讨论

本文使用共享内存方式实现一个属于php的“自旋锁(spinlock)”。 主要特点: 1、检测和避免死锁 2、并可以自定义锁定超时 3、可以在运行结束后自动释放锁定 4、可搜集分析锁竞争和锁等待情况[code] spinlocks) * 用于php进程同步时使用 * * Author : lajabs.net 2011/7/15 */ class slock { /** * $lock_timeout 设置等待回旋次数 * $lock_wait_func 设置等待机制,本例使用usleep+mt_r...

by bs - PHP - 2011-07-15 14:06:22 阅读(2516) 回复(0)

本帖最后由 liklstar 于 2011-09-12 16:47 编辑 在单CPU或SMP的机器中,假设一个线程申请自旋锁而忙等,请问: 如果这个CPU的时间片满,那么该进程是否休眠,还是放入“准备好”队列? 如果这时有硬件中断需要这个CPU处理,那么该进程是否休眠,还是放入“准备好”队列? 《linux设备驱动》上说“持有spinlock的进程不能睡眠”,那要是时间片满或有硬件中断需要处理该怎么办呢?

by liklstar - 内核源码 - 2011-09-12 17:14:35 阅读(1927) 回复(2)

作者:刘洪涛,华清远见嵌入式学院高级讲师,ARM公司授权ATC讲师。

关于自旋锁用法介绍的文章,已经有很多,但有些细节的地方点的还不够透。我这里就把我个人认为大家容易有疑问的地方拿出来讨论一下。

一、自旋锁(spinlock)简介...

by 华清远见 - 移动操作系统 - 2011-01-07 11:36:50 阅读(501) 回复(0)

一、自旋锁(spinlock)简介 自旋锁在同一时刻只能被最多一个内核任务持有,所以一个时刻只有一个线程允许存在于临界区中。这点可以应用在多处理机器、或运行在单处理器上的抢占式内核中需要的锁定服务。 二、信号量简介 这里也介绍下信号量的概念,因为它的用法和自旋锁有相似的地方。 linux中的信号量是一种睡眠锁。如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠。这时处理器获得自由...

by fascination - Linux文档专区 - 2009-05-11 09:40:48 阅读(595) 回复(0)

刚刚看spinlock和semaphores的使用,有几个问题,想请教一下: 1)中断处理程序(top half)中不能睡眠,是因为哪个原因: a)没有进程上下文,睡眠之后不能重新调度? b)中断程序可能关闭了所有中断(使用SA_INTERRUPT),那么再睡眠,就没有抢占点了(中断都进不来,哪里可以schedule()?) 2)kernel thread (ps 中名称类似"[xxx]"),可以睡眠,是因为kernel thread是有上下文,可以调度的, 那么kernel module作为kernel的一部分是否能...

by 淘默儿 - Linux文档专区 - 2008-04-24 10:16:23 阅读(755) 回复(0)

1. TAS lock (test-and-set) 这是最简单的spinlock,CPU会在硬件上提供一些指令来帮助OS实现spinlock, 比如x86就有xchg, LOCK指令前缀等指令。。。 test_and_set()可以利用这些指令对某个memory地址,来原子地完成: 写入true到这个地址,同时返回这个地址储存的旧的值。 void spin_lock(lock) { while (test_and_set(lock, true)); } void spin_unlock(lock) { atomic_set(lock, false); } 在SMP(shared bus)的环...

by eexplorer - Linux文档专区 - 2009-12-21 18:04:58 阅读(1880) 回复(0)

[color="#02368d"]linux 内核的排队自旋锁(FIFO Ticket spinlock) 级别: 中级 [color="#996699"]林 昊翔 ( [email=linhaoxiang@hotmail.com?subject=linux%20%E5%86%85%E6%A0%B8%E7%9A%84%E6%8E%92%E9%98%9F%E8%87%AA%E6%97%8B%E9%94%81%28FIFO%20Ticket%20spinlock%29][color="#5c81a7"]linhaoxiang@hotmail.com[/email] ), linux 内核爱好者 [color="#996699"]秦 君 ( [email=qinjun@cn.ibm.com?subject=linux%20%E5%86%85%E6...

by joely.wu - Linux文档专区 - 2009-03-03 14:26:26 阅读(896) 回复(0)

级别: 中级 林 昊翔 ( [email=linhaoxiang@hotmail.com?subject=linux 内核的排队自旋锁(FIFO Ticket spinlock)]linhaoxiang@hotmail.com[/email] ), linux 内核爱好者 秦 君 ( [email=qinjun@cn.ibm.com?subject=linux 内核的排队自旋锁(FIFO Ticket spinlock)]qinjun@cn.ibm.com[/email] ), 软件工程师, IBM 2008 年 6 月 05 日 排队自旋锁(FIFO Ticket spinlock)是 linux 内核 2.6.25 版本中引入的一种新型自旋锁,它解决了...

by smsong_cu - Linux文档专区 - 2008-10-15 10:47:24 阅读(599) 回复(0)

最近看了一点MP上的lock,发现一个问题,大家讨论一下吧。 一般在IA32的spinlock的实现中几乎都有“pause”这条指令,为的是减少MP之间为了维持cache的一致性而进行的大量通讯,这也是Intel手册上建议的。在FreeBSD与OpenSolaris上也确实是这样作了,但是,奇怪的是linux2.6的内核中并没有这么作,而是用"rep;nop"来代替的,看代码 [code] "\n1:\t" \ "lock ; decb %0\n\t" \ "jns 4f\n\t" \ ...

by mingyanguo - 内核/嵌入技术 - 2006-01-18 17:28:13 阅读(1473) 回复(6)

最近看了一点MP上的lock,发现一个问题,大家讨论一下吧。 一般在IA32的spinlock的实现中几乎都有“pause”这条指令,为的是减少MP之间为了维持cache的一致性而进行的大量通讯,这也是Intel手册上建议的。在FreeBSD与OpenSolaris上也确实是这样作了,但是,奇怪的是linux2.6的内核中并没有这么作,而是用"rep;nop"来代替的,看代码 [code] "\n1:\t" \ "lock ; decb %0\n\t" \ "jns 4f\n\t" \ ...

by mingyanguo - 内核源码 - 2006-01-18 17:28:13 阅读(2136) 回复(6)