ChinaUnix.net
相关文章推荐:

mutexlock spinlock 区别

之前记得有一篇文章讲过,spin_lock()在up下只是禁止抢占,并不会让cpu自旋停顿;而spin_lock()在smp下才会实现真正的自旋停顿。有位兄弟在这个帖子里也提到过:http://bbs.chinaunix.net/thread-1927929-1-1.html,本来我对这一点也是深信不疑的,但是我自己做了一个小测试,发现并不是这样子的,测试过程如下: http://www.linux2web.net/?p=716 希望精通的朋友能解释一下

by jinxinxin163 - 内核源码 - 2014-08-05 09:10:41 阅读(2061) 回复(6)

相关讨论

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

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

本帖最后由 funtasty 于 2012-07-19 08:33 编辑 我有两个 处理数据报的缓冲队列,一个高速, 一个低速。 分别要记数。fast_len, slow_len. 而且 要在无数据报的时候 释放CPU。 代码大致如下: while(1) { if (fast_len > 0) { spin_lock_bh(fast_lock); fast_len--; spin_unlock_bh(fast_lock); } else if (slow_len > 0) { spin_lock_bh(slow_lock); slow_len--; ...

by funtasty - 内核源码 - 2012-11-14 11:44:00 阅读(2310) 回复(15)

Linux系统提供的内核同步机制有很多种。  spinlock只是一种选择,并不是所有同步的地方都用spinlock.  通常它适用于对内核(包括模块)的一些全局数据结构的访问。  spinlock中所保护的codes最好能迅速完成,同时释放该锁。  在无法获得该锁的情况下,内核不会切换,而是不断地尝试, 这也是spinlock名字的由来, 也正因为此,所以spinlock中的代码不能有schedule()之类的放弃CPU的代码,也不会能被抢占,但可...

by wbslinux - Linux文档专区 - 2009-06-02 19:08:51 阅读(1232) 回复(0)

請問我enable 了 kernel CONFIG_DEBUG_spinlock 選項後程式開機起來app一跑就出現在列的message,請問是kernel的問題還是我的driver可能有問題? Linux2.6.28.7 arm-926ejs 謝謝 BUG: spinlock bad magic on CPU#0, fullfw/2042 lock: bf025500, .magic: 00000000, .owner: /-1, .owner_cpu: 0 [] (dump_stack+0x0/0x14) from [] (spin_bug+0x90/0xa4) [] (spin_bug+0x0/0xa4) from [

by happydo - 内核源码 - 2011-09-19 18:18:13 阅读(2871) 回复(0)

大家好,问个 spin_lock 的问题。 在我的 Driver 里面存在一个全局变量 global_A 为了保证数据的一致,所以采用互斥操作,在访问 global_A 时,我会进行“加锁” 与 “解锁”操作,采用 spin_lock_irqsave 与 spin_unlock_irqrestore 有这样一种情况: func_B() { // 对全局变量进行操作(读或写) 问题:func_B 只有 func_A 来调用,那么 fun_B 中应该不用 lock 与 unlock 操作了吧? }...

by qiangqiang02 - 驱动开发 - 2009-11-09 14:59:11 阅读(1506) 回复(6)

最近看文档:The spinlock is a very simple single-holder lock. If a process attempts to acquire a spinlock and it is unavailable, the process will keep trying (spinning) until it can acquire the lock. 请教两个相关问题: 1. 假如该process一直在accquire the spinlock,但没有成功;那么在它keep trying(spinning)的过程中,它是否可能被switch out(进程状态由RUNNING转成WAITING) ? 2. 假设该process已经获得了sp...

by rc_hz - 内核源码 - 2009-10-16 11:47:01 阅读(1921) 回复(6)

  自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。   由于自旋锁使用者一般保持锁时间非常短,因此选择自旋而不是睡眠是非常必要的,自旋锁的效率远高于互斥锁。   信号量和读写信号量适合于保持时间较长的情况,它们会导致调用者睡眠,因此只能在进程上下文使用(_trylock的变种能够在...

by newcch - Linux文档专区 - 2009-07-02 00:32:19 阅读(1079) 回复(0)

看了很多资料,始终没有找到spinlock在uniprocessor下的行为, 我的个人理解是这样的,不知道对不对,请大牛们指正: uniprocessor + non-preempitle kernel : spinlock被优化为nop操作,即什么都不做。 uniprocessor + preempitle kernel: spinlock起作用,跟multiprocessor的代码一样。 不知道这样的理解是否正确?

by fantry_t - 内核源码 - 2009-09-11 09:53:26 阅读(2043) 回复(4)

前几天写的模块代码,发现读多写少,查了资料说是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 阅读(3130) 回复(3)

我在日志里看到一条warning的记录: Warning! The spinlock pool has grown to be larger than the spinlock monitor area. Not all spinlock statistics is available. A server reboot is needed if all spinlock statistics is necessary 有谁可以帮忙解释一下吗, 我以前还没碰上过spinlock这个东西, 有什么影响吗? 谢谢 在线等

by zlpica - AIX - 2006-10-11 20:02:22 阅读(1637) 回复(1)