文章标题
2016-03-04 18:29
267 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012466727/article/details/50804746
typedef struct __wait_queue wait_queue_t; typedef void (*wait_queue_func_t)(wait_queue_t * wait,uint mode,int sync,void *key); struct __wait_queue{ unsigned int flag; wait_queue_func_t func; void *private; struct list_head task_list; }; struct __wait_queue_head{ spinlock_t lock; struct list_head task_list; }; typedef struct __wait_queue_head wait_queue_head_t; struct completion{ //0 未完成 大于0 完成 unsigned int done;//等待事件是否完成 wait_queue_head_t wait; }; #define COMPLETION_INITIALIZER(work) \ {0,__WAIT_QUEUE_HEAD_INITIALIZER((work).wait)} #define DECLARE_COMPLETION(work) \ struct completion work = COMPLETION_INITIALIZER(work) static inline void init_completion(struct completion *com) { work->done = 0; init_waitqueue_head(&com->wait); }
静态创建completion
DECLARE_COMPLETION(my_completion);
动态创建completion
struct completion my_completion; init_completion(&my_completion);