在“等待”线程中定义的结构完成类型的自动变量上调用complete()

时间:2015-06-17 14:29:47

标签: linux-kernel linux-device-driver

我尝试在一段代码中理解完成的使用。

基本上,一个内核线程创建自动变量struct completion,我假设它是在线程的堆栈上分配的。然后它将完成结构的指针推送到另一个线程(使用fifo)并等待完成。

struct completion done;

init_completion(&done);
push_to_fifo(&done);
wait_for_completion(&done);

第二个线程从fifo获取请求,处理它并完成任务。

是否可以从调用完成(完成)的第二个线程访问done变量?

1 个答案:

答案 0 :(得分:0)

第一个线程正在等待第二个线程完成,因此其堆栈上的struct completion将保持稳定,直到wait_for_completion返回。

该结构所在的堆栈空间只是常规内存,与堆分配的内存相同。唯一的区别是,一旦此函数返回,并且其调用者调用不同的函数,相同的内存将被重用于下一个函数的堆栈帧/局部变量。

所以,如果另一个线程在该点之后访问该结构,那将是一个问题,但关键是应该在那时完成并且一旦它发出“完成”信号,它就不应该触及记忆了。