linux-kernel - Linux 设备驱动程序中针对多线程应用程序的读/写和释放处理

标签 linux-kernel mutex linux-device-driver vfs

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

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

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

最佳答案

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

关于linux-kernel - Linux 设备驱动程序中针对多线程应用程序的读/写和释放处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18996810/

相关文章:

c - 尝试使用 `nlmsg_free(skb_out)` 释放 skb 时内核崩溃

c++ - boost::shared_ptr boost::mutex 和复制构造函数

c - 互斥锁已锁定,但其他线程正在进入临界区

linux - 我想抱着互斥锁 sleep

timer - 为什么linux内核中的udelay和ndelay不准确?

linux - linux fork不安全吗

linux - 在 main 之前调用系统调用

linux - 如果我在创建子进程之前初始化一个互斥量,所有的子进程都会接受这个互斥量吗?

c - 平台设备;为什么是 'alloc' 和 'add' ?

c - 如果过期,hrtimer 不会返回负值