Linux 设备驱动程序中针对多线程应用程序的 READ/WRITE 和 RELEASE 处理

use*_*986 3 mutex vfs linux-device-driver linux-kernel

在编写驱动程序时,我遇到了下面提到的问题。

假设多线程应用程序通过相同的 FD 访问相同的设备文件。考虑在对 OPEN 和 RELEASE 的调用之间,线程组相互持有一些资源(比如互斥锁)。这些资源在 READ/WRITE 调用期间使用,然后最终在 RELEASE 期间放弃或销毁。

如果在 READ/WRITE 期间有一个线程访问资源,而另一个线程同时通过调用 close 调用 RELEASE,则 VFS 如何确保在 READ、WRITE 或 READ 中至少有一个线程之前不会调用 RELEASE喜欢。什么机制处理这种保护?

Ben*_*ber 5

设备驱动程序之上的内核层会跟踪存在多少对打开文件的引用,并且在所有这些引用都已关闭之前不会调用释放函数。这在 LDD3 中有所记载:http ://tjworld.net/books/ldd3/#TheReleaseMethod