1
只是不明白爲什麼sk_buff結構沒有spin_lock或mutex變量。爲什麼沒有sk_buff有spin_lock或mutex
直覺是有可能有多個線程想訪問skb?
我知道它有「用戶」變量的引用計數,當免費時,kfree_skb將檢查用戶變量,但這並不保護其他數據在此結構中的其他一致性,對嗎?
任何提示將不勝感激。
謝謝。
只是不明白爲什麼sk_buff結構沒有spin_lock或mutex變量。爲什麼沒有sk_buff有spin_lock或mutex
直覺是有可能有多個線程想訪問skb?
我知道它有「用戶」變量的引用計數,當免費時,kfree_skb將檢查用戶變量,但這並不保護其他數據在此結構中的其他一致性,對嗎?
任何提示將不勝感激。
謝謝。
爲什麼要多個線程想要訪問skb?
通常由一個隊列填充並列入fifo列表(例如網絡驅動程序),然後由另一個列隊出隊(例如接收用戶進程),多個線程可能想要訪問該列表,但併發性已在處理列表級別。
明顯的鎖應該是避免的,如果沒有必要的話,代碼可能是每天最常用的一種用法(fifo/pipes和network,kernel ipc?),如果有併發錯誤應該自己揭示很快。
謝謝,亞歷克斯。因爲我看到users變量,所以變量意味着「現在有多少讀者正在使用這個skb」? –
其實我只是想嘗試在skb中使用的方法來解決我在這個線程的問題http://stackoverflow.com/questions/32494099/dynamic-allocate-free-structure-with-embedding-lock-in-linux-kernel –
@AnakinTung,我明白了,所以你從數據中分離了結構,並且可以在沒有崩潰的情況下釋放它,但是在修改數據時會出現併發問題? – Alex