Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
互斥锁必须在其包含结构为kmem_cache_free'之前解锁吗;D_C_Linux_Kernel_Mutex_Linux Device Driver - Fatal编程技术网

互斥锁必须在其包含结构为kmem_cache_free'之前解锁吗;D

互斥锁必须在其包含结构为kmem_cache_free'之前解锁吗;D,c,linux,kernel,mutex,linux-device-driver,C,Linux,Kernel,Mutex,Linux Device Driver,在linux内核驱动程序中,必须先解锁互斥锁,然后才能释放并返回缓存?我假设它一定是这样的,只要kmem_缓存本身没有做任何事情 是的,一定是这样 代码(如果使用slab分配器)甚至会试图找出您释放的对象中是否有一些锁,以及如果它们仍然被锁定,您是否有一个bug。我不知道这对于内核设备驱动程序是否不同。但假设您使用pthread_mutex_t,根据man phtread_mutex_destroy的说法,您应该解锁它们,以便对它们调用pthread_mutex_destroy。在内核驱动程序世

在linux内核驱动程序中,必须先解锁互斥锁,然后才能释放并返回缓存?我假设它一定是这样的,只要kmem_缓存本身没有做任何事情

是的,一定是这样


代码(如果使用slab分配器)甚至会试图找出您释放的对象中是否有一些锁,以及如果它们仍然被锁定,您是否有一个bug。

我不知道这对于内核设备驱动程序是否不同。但假设您使用pthread_mutex_t,根据
man phtread_mutex_destroy
的说法,您应该解锁它们,以便对它们调用pthread_mutex_destroy。在内核驱动程序世界中,这可能与我习惯的情况不同。kmem_cache_free实际上并不释放内存,而是将其返回到缓存。所以互斥锁仍然有效,至少在它被收获之前,问题是它是否被免费的,收获的,或者两者都没有解锁。。。我假设两者都不是,在返回到缓存之前,互斥锁必须解锁(在已知状态下),这似乎对我来说才合理。但我想我应该和集体商量一下!