Linux内核对于同一个数据结构重复提交,会重复添加吗?

简答:不会

解析

比如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);

信号

已经发送但还没被接受的信号,被称为挂起信号。
仍和时候,一个进程仅存在给定类型的一个挂起信号,同一进程同样类型的其他信号不被排队,只被简单地丢弃

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值