Linux kernel Linux内核中for_-each_进程宏的使用

Linux kernel Linux内核中for_-each_进程宏的使用,linux-kernel,Linux Kernel,我想迭代内核中的每个进程,并在task\u struct中修改一些参数。我想我可以使用for_each_process()宏来执行此操作 但是,为了安全地执行,我必须确保当前未执行该进程,并且在我获得对其任务结构的引用后,我希望将其锁定,以便在我修改它时没有其他人访问它 如何实现这两个目标?您可以使用: int flags; smp_wmb(); raw_spin_lock_irqsave(&task->pi_lock, flags); do your stuff raw_s

我想迭代内核中的每个进程,并在
task\u struct
中修改一些参数。我想我可以使用
for_each_process()
宏来执行此操作

但是,为了安全地执行,我必须确保当前未执行该进程,并且在我获得对其
任务结构的引用后,我希望将其锁定,以便在我修改它时没有其他人访问它

如何实现这两个目标?

您可以使用:

int flags;  
smp_wmb(); 
raw_spin_lock_irqsave(&task->pi_lock, flags);
do your stuff
raw_spin_unlock_irqrestore(&task->pi_lock, flags);
锁定当前正在处理的任务。

您可以使用:

int flags;  
smp_wmb(); 
raw_spin_lock_irqsave(&task->pi_lock, flags);
do your stuff
raw_spin_unlock_irqrestore(&task->pi_lock, flags);

锁定当前正在处理的任务。

好的,我认为对于\u,每个\u进程()都受rcu lock保护。因此,至少可以保证,当我使用它时,其他人不会释放内存。现在的问题仍然是如何在我修改它的时候保护它。这个网站的读者主要是用户和管理员,而不是程序员,所以我认为你的问题会更好。不要在那里转载;我已经让主持人把你的问题迁移了。好的,我认为对于_,每个_进程()都受到了rcu锁的保护。因此,至少可以保证,当我使用它时,其他人不会释放内存。现在的问题仍然是如何在我修改它的时候保护它。这个网站的读者主要是用户和管理员,而不是程序员,所以我认为你的问题会更好。不要在那里转载;我已请主持人将您的问题迁移。