为什么sk_buff没有spin_lock或互斥锁

时间:2015-09-11 17:26:19

标签: linux linux-kernel linux-device-driver

只是不明白为什么结构sk_buff没有spin_lock或互斥变量。

直觉可能有多个线程想要访问skb?

我知道它有“用户”变量用于引用计数,并且在空闲时,kfree_skb将检查用户变量,但这不保护此结构中其他数据的其他一致性,对吧?

任何提示都会受到欢迎。

感谢。

1 个答案:

答案 0 :(得分:0)

为什么多个线程想要访问 skb

通常由一个填充并且在fifo列表中排队(例如网络驱动程序)然后由另一个列表(例如接收用户进程),多个线程可能想要访问列表但是已经在列表级别。

显然,如果没有必要,应该避免使用锁, skb 代码可能是日常使用中最常用的代码之一(fifo / pipes和network,kernel ipc?),如果有并发的话bug很快就会显现出来。