+ -
当前位置:首页 → 问答吧 → 一个简单的通知链。。。

一个简单的通知链。。。

时间:2010-06-25

来源:互联网

notify_chain.rar (1.72 KB)
下载次数: 10
2010-06-25 15:38


一个简单的通知链的实现,多线程下用。。欢迎拍砖

作者: wmmy2008   发布时间: 2010-06-25

GOOD,谢了咯

作者: rrz214   发布时间: 2010-06-25

extern int event_register_notify_chain(struct notify_node * node);
这个函数其实可以不暴露struct notify_node吧,直接用以下三个成员做参数,在函数内部进行内存分配。

        int (*notify_call)(struct notify_node *, void *);

        /*list is from min to max*/
        char priority;         /*0,1,2,3....*/

        void * data;

另外那个likely()在哪里定义的?

作者: 没本   发布时间: 2010-06-25



QUOTE:
extern int event_register_notify_chain(struct notify_node * node);
这个函数其实可以不暴露struct not ...
没本 发表于 2010-06-25 16:02




    #define likely(x)        __builtin_expect(!!(x), 1) 用的GCC的一个扩展...

   注册的时候 struct notify_node 留给用户处理,,函数内并未动态分配.

作者: wmmy2008   发布时间: 2010-06-25

另外,fun()回调可能在任何线程发生,因此需要fun()自己保障线程安全。我还是倾向各线程回调各自对应的回调函数fun(),可以避免锁。

作者: 没本   发布时间: 2010-06-25

回复 没本


    如果回调函数需要加锁的话,肯定要用户自己实现,这里的锁主要是为同步通知链的操作..

作者: wmmy2008   发布时间: 2010-06-25