内核:同步删除task_struct的共享字段



我想添加一个指针(对象)到task_struct,在组中所有线程之间共享。在对象被一个线程删除后,我如何确保另一个线程不会试图解引用无效指针?

我可以在task_struct中添加一个原子变量引用字段,然后在进程的所有线程中同步更新它们(在遍历task_structs时保持全局自旋锁)吗?

或者实现一个内核线程来管理对象及其引用计数。似乎这个问题必须由其他共享实体解决,如虚拟内存和文件句柄。

你可以定义你自己的数据结构:my_task_data {void * real_data;}

task_struct必须增强:task_struct {…Struct my_task_data *mtd;

};

在clone()调用中需要处理task_struct的mdt成员。Real_data指向您想要的任何值。这样做意味着每个task_struct都有一个指向共享对象(mtd)的指针,该指针始终有效,并且可以在任何时候解引用。这个共享对象包含一个指向实际数据项的指针。当您想要访问项目时,执行:

 data = current()->mtd->real_data;

如果data是NULL,另一个线程已经删除了它,否则它可以使用。

锁问题在这个示例中没有显示。

当然,你需要通过某种锁定机制来保护对real_data的访问,比如my_task_data结构中的互斥锁或信号量,并在操作my_task_data时使用它。

最新更新