【问题标题】:Why doesn't sk_buff have spin_lock or mutex为什么 sk_buff 没有 spin_lock 或 mutex
【发布时间】:2015-12-08 08:10:11
【问题描述】:

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

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

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

任何提示将不胜感激。

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,亚历克斯。由于我看到了 users 变量,所以该变量的意思是“现在有多少读者正在使用这个 skb”?
    • 其实我只是想试试skb中使用的方法来解决我在这个线程stackoverflow.com/questions/32494099/…的问题
    • @AnakinTung,我明白了,所以您从数据中拆分了结构,并且可以在不崩溃的情况下释放它,但是修改数据时出现并发问题?
    • 其实我在arch/um/drivers/net_kern.c中看到了代码。您可以在该源文件中引用函数 update_drop_skb。修改数据不会有并发问题,因为spin_lock有保护作用。
    猜你喜欢
    • 2017-03-28
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 2016-11-21
    相关资源
    最近更新 更多