简答:不会
解析
比如tasklet
的重复提交
/* 初始化一个tasklet */
tasklet_init(&my_tasklet, tasklet_handler, 0);
/* 提交tasklet到软中断进行处理 */
tasklet_schedule(&my_tasklet);
/* 在还没有处理之前,再次提交,这个tasklet会执行两次吗? */
tasklet_schedule(&my_tasklet);
类似于这种提交任务,Linux内核采取的策略为,重复提交单一处理。
在上一个对象还没处理之前,重复提交并不会产生额外的一个对象,即同一个提交对象,最多仅会处理一次。
目前已知采取这种策略的有
/* 重复的提交不产生任何作用 */
void tasklet_schedule(struct tasklet_struct *t);
/* 重复的提交会直接返回失败 */
bool queue_work(struct workqueue_struct *wq, struct work_struct *work);
/* 重复的提交仅仅改变定时器时间,定时器不会发生两次 */
void add_timer(struct timer_list *timer);
信号
已经发送但还没被接受的信号,被称为挂起信号。
仍和时候,一个进程仅存在给定类型的一个挂起信号,同一进程同样类型的其他信号不被排队,只被简单地丢弃。