文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>通知链

通知链

时间:2010-05-18  来源:cheney1982

Linux内核协议栈大量使用通知链这种技术,用法如下:
1) 定义一个通知链BLOCKING_NOTIFIER_HEAD(my_event_chain)。
2) 定义一个通知块struct notifier_block my_event_block = {
.notifier_call =my_event_process_func, };
3) 使用blocking_notifier_chain_register(my_event_block)把这个通知块挂接到my_event_chain。
4) 另一处代码调用blocking_notifier_call_chain(my_event_chain),那么就把一个事件发送到对应的通知块上,对应的处理函数就会处理事件。
内部实现是这样的blocking_notifier_call_chain内部调用notifier_call_chain,这个函数内部会遍历通知链,然后以此执行通知块上的回调函数:

1. int notifier_call_chain(struct notifier_block **n, unsigned long val, void *v)
2. {
3. int ret=NOTIFY_DONE;
4. struct notifier_block *nb = *n;
5.
6. while(nb)
7. {
8. ret=nb->notifier_call(nb,val,v);
如果执行环境处于调试中断中,那么可以退出遍历
9. if(ret&NOTIFY_STOP_MASK)
10. {
11. return ret;
12. }
13. nb=nb->next;
14. }
15. return ret;
16. }
代码段 2-14 notifier_call_chain函数 从代码上看,所谓通知链并不是真正的“通知”方式,而是直接回调方式,这就要保证不写出递归很多次的代码,以免内核栈被撑死。
相关阅读 更多 +
排行榜 更多 +
奥丘树海之下小米服手游下载

奥丘树海之下小米服手游下载

角色扮演 下载
网络天才国际服手游下载

网络天才国际服手游下载

休闲益智 下载
御剑红尘手游官方版下载

御剑红尘手游官方版下载

角色扮演 下载