【发布时间】:2015-12-08 08:10:11
【问题描述】:
只是不明白为什么结构 sk_buff 没有 spin_lock 或 mutex 变量。
直觉是不是可能有多个线程要访问skb?
我知道它有用于引用计数的“users”变量,并且在执行 free 时,kfree_skb 会检查 users 变量,但这并不能保护此结构中其他数据的其他一致性,对吧?
任何提示将不胜感激。
谢谢。
【问题讨论】:
标签: linux linux-kernel linux-device-driver
只是不明白为什么结构 sk_buff 没有 spin_lock 或 mutex 变量。
直觉是不是可能有多个线程要访问skb?
我知道它有用于引用计数的“users”变量,并且在执行 free 时,kfree_skb 会检查 users 变量,但这并不能保护此结构中其他数据的其他一致性,对吧?
任何提示将不胜感激。
谢谢。
【问题讨论】:
标签: linux linux-kernel linux-device-driver
为什么多个线程要访问一个skb?
通常由一个填充并排入fifo列表(例如网络驱动程序),然后由另一个(例如接收用户进程)出列,多个线程可能想要访问该列表,但并发已经在列表级别。
如果没有必要,显然应该避免使用锁,skb 代码可能是日常使用中最常用的代码之一(fifo/pipes 和网络,内核 ipc?),如果有并发的话错误应该很快就会显现出来。
【讨论】: