首页 > 解决方案 > 如何确保只有一个 C 内核模块实例正在运行(单例)?

问题描述

对于我的任务,我需要为我的内核模块确定合适的设计模式。由于它修改了内核代码的一个关键区域,因此我不能允许它运行多个实例 - 修改后的代码可能会被用作原始代码,并且无法将系统恢复到其初始状态在 module_exit 上。考虑到这一点,我选择了 Singleton 设计模式等。现在我需要实际实施限制,它随之而来 - 程序需要保证当时只有一个实例处于活动状态。

这是内核模块的常见做法吗?我没看到有人讨论过这个。如果是这样,我该如何实施限制?

标签: cdesign-patternskernelsingleton

解决方案


与其说是正在运行的模块实例的数量,不如说是正在运行的多个线程正在执行同一模块。

避免冲突的一种方法是“锁定”一个互斥体,从而阻止所有其他在代码的某个关键部分尝试执行相同代码的线程,然后“解锁”该互斥体,从而使另一个线程能够执行相同的代码.


推荐阅读