并发性 – 特定场景的最佳Linux内核锁定机制是什么
我需要为这种情况解决锁定问题: >多CPU系统. 目前我使用read_lock_bh,write_lock_bh(自旋锁)机制. 我在this book阅读了并发章节, 所以问题是: > Linux自旋锁机制是否优先考虑读者/作者/没有? 谢谢, 解决方法这是 Essential Linux Device Drivers的直接引用,可能是您正在寻找的.似乎最后处理RCU的部分可能是你感兴趣的部分.读者 – 作家锁 另一种专门的并发调节机制是自旋锁的读写器变体.如果使用一个 rwlock_t myrwlock = RW_LOCK_UNLOCKED; read_lock(&myrwlock); /* Acquire reader lock */ /* ... Critical Region ... */ read_unlock(&myrwlock); /* Release lock */ 但是,如果编写器线程进入临界区,则不允许其他读取器或写入器线程进入.使用 rwlock_t myrwlock = RW_LOCK_UNLOCKED; write_lock(&myrwlock); /* Acquire writer lock */ /* ... Critical Region ... */ write_unlock(&myrwlock); /* Release lock */ 查看net / ipx / ipx_route.c中的IPX路由代码,了解读写器自旋锁的实际示例.一个 像常规自旋锁一样,读写器锁也有相应的irq变体 – 即read_lock_irqsave(), 2.6内核中引入的序列锁或序列锁是读写器锁,其中编写器受到青睐 u64 get_jiffies_64(void) /* Defined in kernel/time.c */ { unsigned long seq; u64 ret; do { seq = read_seqbegin(&xtime_lock); ret = jiffies_64; } while (read_seqretry(&xtime_lock,seq)); return ret; } 编写器使用write_seqlock()和write_sequnlock()保护关键区域. 2.6内核引入了另一种称为读取副本更新(RCU)的机制,它产生了改进 有关RCU用法示例,请查看fs / dcache.c.在Linux上,每个文件都与目录条目相关联信息(存储在称为dentry的结构中),元数据信息(存储在inode中)和实际数据(存储在数据块中).每次操作文件时,都会解析文件路径中的组件,并且获得相应的dentry. dentries保存在名为dcache,to的数据结构中加快未来的运营.在任何时候,dcache查找的数量远远超过dcache更新,因此使用RCU原语保护对dcache的引用. (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |