2013-12-16 53 views
1

在linux內核驅動程序中,必須先釋放一個互斥鎖,然後才能釋放並返回到緩存中?我假設它一定是,提供什麼基礎kmem_cache自己做!!在其包含結構kmem_cache_free'd之前,是否必須解鎖互斥鎖?

+0

我不知道它是否與內核設備驅動程序不同。但是假設你使用pthread_mutex_t,根據'man phtread_mutex_destroy'你應該解鎖它們,以便在它們上調用pthread_mutex_destroy。 – hetepeperfan

+0

它在內核驅動程序世界中可能與我習慣的不同。 kmem_cache_free實際上不釋放內存,但將其返回到緩存。所以這個互斥體仍然有效,至少在它被收穫之前,問題是它是否被免費,收穫或者兩者都解鎖了......我都不假設,對我來說似乎只是明智的,互斥體必須解鎖(處於已知狀態),然後返回到高速緩存。但我想我會和集體一起檢查! – Joe

回答

2

是的,它必須。

代碼here(如果使用slab分配器的話)甚至會試圖找出你的對象是否有鎖,如果你還有鎖,那麼你有一個bug。