只是不明白为什么结构sk_buff没有spin_lock或互斥变量。
直觉可能有多个线程想要访问skb?
我知道它有“用户”变量用于引用计数,并且在空闲时,kfree_skb将检查用户变量,但这不保护此结构中其他数据的其他一致性,对吧?
任何提示都会受到欢迎。
感谢。
答案 0 :(得分:0)
为什么多个线程想要访问 skb ?
通常由一个填充并且在fifo列表中排队(例如网络驱动程序)然后由另一个列表(例如接收用户进程),多个线程可能想要访问列表但是已经在列表级别。
显然,如果没有必要,应该避免使用锁, skb 代码可能是日常使用中最常用的代码之一(fifo / pipes和network,kernel ipc?),如果有并发的话bug很快就会显现出来。