我正在开始实现第一个 Solaris 设备驱动程序。在实现getinfo
入口点例程时,我们是否必须关心它可以被不同的内核线程调用?通常这个函数更新每个实例的软状态数据结构,并且在多线程访问的情况下,该结构必须由互斥锁保护。
所以我的问题是getinfo
回调是否可以由系统的多个线程调用,或者操作系统保证只有一个线程调用它?这个man getinfo
不是很清楚。
谢谢。
我正在开始实现第一个 Solaris 设备驱动程序。在实现getinfo
入口点例程时,我们是否必须关心它可以被不同的内核线程调用?通常这个函数更新每个实例的软状态数据结构,并且在多线程访问的情况下,该结构必须由互斥锁保护。
所以我的问题是getinfo
回调是否可以由系统的多个线程调用,或者操作系统保证只有一个线程调用它?这个man getinfo
不是很清楚。
谢谢。
我也找不到明确的答案。我建议安全并设置一个 mutex。您将花费更少的时间来做这件事,而不是继续寻找一个明确的答案来证明同时呼叫不会发生(或始终是安全的)。
最坏的情况是,每次通话花费一毫秒或更短的时间。最好的情况是,您已经保护自己免受内核恐慌或某处损坏的数据的影响。在任何一种情况下,您都会学到更多关于编写 Solaris 设备驱动程序的知识。
这可能是 Solaris 文档的一个典型问题 - 类似这样的内容可能隐藏在某个手册页的某处,但如果您不知道该查看哪一个,您将找不到它。(现在我已经回答了,请注意:知道在哪里看的人会发布明确的答案...... )
基于对我可用资源的快速回顾:不,您不需要使用互斥锁来保护 *getinfo() 。