__wake_up唤醒等待队列中的进程

本文详细介绍了Linux内核中的等待队列结构,包括wait_queue_head_t和wait_queue_t,以及__wake_up、__wake_up_sync等唤醒函数的工作流程。等待队列用于管理处于等待状态的进程,通过自旋锁保护并发访问,并通过回调函数选择性地唤醒进程。文章深入探讨了唤醒过程中的互斥机制和同步策略。
摘要由CSDN通过智能技术生成

等待队列头

struct __wait_queue_head 

{

     spinlock_t lock; //自旋锁用于保护自身资源(task_list链表)不被多个进程同时访问
     struct list_head task_list;//双向循环链表通过此字段连接成等待对列链表
};
typedef struct __wait_queue_head wait_queue_head_t;


等待队列项

struct __wait_queue

{

       //唤醒进程的方式 其中0是非互斥,WQ_FLAG_EXCLUSIVE(0×01)是互斥

     当一个等待队列入口有 WQ_FLAG_EXCLUSEVE 标志置位, 它被添加到等待队列的尾部. 没有这个标志的入口项, 相反, 添加        到开始
    当 wake_up 被在一个等待队列上调用, 它在唤醒第一个有 WQ_FLAG_EXCLUSIVE 标志的进程后停止

       unsigned int flags;

#define WQ_FLAG_EXCLUSIVE 0x01

        //私有指针变量,使用过程中会用来存放task_struct结构体
       void *private;

      //func是一个函数指针,指向用于唤醒队列中线程的函数。虽然提供了默认的唤醒函数default_wake_function,但也允许         灵活的设置队列的唤醒函数
      wait_queue_func_t func;

       //链表,

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值