考虑一个实现 open()、read()、write()、close()、unlocked_ioctl() 和 mmap() 的 linux 设备驱动程序。
现在,假设多个(或相同的)进程同时打开同一个设备(/dev/device)。
这些文件操作是否以任何方式保证彼此是原子的,或者 open()、read()、write()、close() 中的每一个是否应该采用互斥锁,以便它们的一对不会抢占它们而例如,在更改缓冲区数据的过程中(通过相同的 inode)?
如果内核保证它们彼此之间的原子性并且每个操作都找到并保持缓冲区/硬件处于一致状态,则应该没有必要。
请把我重定向到一些参考资料(如果你知道的话)。
谢谢你。
编辑:它在其中一条评论中,但我找到的最佳参考在这里:
http://www.makelinux.net/ldd3/chp-6-sect-6
它还展示了缓解问题的策略,或者通过限制单个用户,或者通过创建副本,或者通过强制用户等待等。