鸿蒙安全模块security_huks/services/huks_service/main/src/hks_operation+hks_double_list

本文概述了HksOperation结构中的双链表操作,包括初始化DoubleList,节点插入(头尾)、删除节点,以及关键的链表管理函数如添加、查询、删除和计数操作。这些函数确保了数据一致性并支持复杂的数据结构管理。
摘要由CSDN通过智能技术生成

总结概况

首先我们可以知道HksOperation结构体的构造
在这里插入图片描述
一种结构体套结构体的结构

而我们这里说的上链其实是这个g_operationList它本身也是一个DoubleList而它的结点也都是一个DoubleList的头结点,所以该链表的主干是每一个operation的ListHead的头结点然后每一个operationListHead中又包含了一个操作链DouleList和相关信息

这部分代码主要围绕DoubleList结构体进行operation链中链的构造、添加、查找结点等操作的功能函数编写

代码解读

1.double_list

从double_list可以知道这是双向链表的操作函数
在这里插入图片描述
四个操作:
1.双向列表的初始化——一个结点的首尾指针都指向自己结点
2.在头结点后插入一个结点pre跟next都是头结点
3.在尾部插入一个结点(该结点的下一个结点为头部)
4.移除结点

1.1InitializeDoubleList

1.2AddNodeAfterDoubleListHead

1.3AddNodeAtDoubleListTail

1.4RemoveDoubleListNode

/双向列表的初始化——一个结点的首尾指针都指向自己结点
void InitializeDoubleList(struct DoubleList *node)
{
    if (node == NULL) {
        return;
    }

    node->prev = node;
    node->next = node;
}

//在头结点后插入一个结点pre跟next都是头结点
void AddNodeAfterDoubleListHead(struct DoubleList *head, struct DoubleList *node)
{
    if ((head == NULL) || (node == NULL)) {
        return;
    }

    if (head->next == NULL) {
        head->next = head;
    }

    head->next->prev = node;
    node->next = head->next;
    node->prev = head;
    head->next = node;
}

//在尾部插入一个结点(该结点的下一个结点为头部)
void AddNodeAtDoubleListTail(struct DoubleList *head, struct DoubleList *node)
{
    if ((head == NULL) || (node == NULL)) {
        return;
    }

    if (head->prev == NULL) {
        head->prev = head;
    }

    head->prev->next = node;
    node->next = head;
    node->prev = head->prev;
    head->prev = node;
}

//移除结点
void RemoveDoubleListNode(struct DoubleList *node)
{
    if (node == NULL) {
        return;
    }

    if (node->next != NULL) {
        node->next->prev = node->prev;
    }

    if (node->prev != NULL) {
        node->prev->next = node->next;
    }

    node->prev = NULL;
    node->next = NULL;
}

2.hks_operation

对于operation链中链的操作函数

使用互斥锁是为了保证数据的读写时空的一致性

2.1FreeOperation

函数功能:释放操作链表

函数实现:将对应的链下链并调用宏定义的函数HKS_FREE_BLOB和HKS_FREE_PTR进行释放
在这里插入图片描述

2.2AddOperation

函数功能:进行操作链表的上链

函数实现:互斥锁的获取---->检查链表结点的个数---->如果大于等于最大结点数则将第一个已执行过即abortable属性为true的结点进行删除---->将所给链表的listHead插入全局的g_operationList中---->互斥锁的释放

在这里插入图片描述

2.3CreateOperation

函数功能:根据传入的参数创建一个operation上链

函数实现:为operation分配空间---->进行数据的赋值---->将新构建好的operation上链g_operationList

在这里插入图片描述

2.4QueryOperation

函数功能:返回operationHandle相同的operation用于加载入队列执行相应命令操作
在这里插入图片描述

2.5DeleteOperation

函数功能:根据operationHandle将一个operation结点删除
在这里插入图片描述

2.6DeleteSession

函数功能:根据processName将一个operation下链删除

函数实现:该函数跟DeleteOperation实现的功能相似,但是判断的条件略有不同,一个是通过operationHandle,一个是通过processName也就是进程名称来寻找
在这里插入图片描述

2.7DeleteFirstAbortableOperation

函数功能:将最早abortable为true的上链listHead进行删除
在这里插入图片描述

2.8GetAbortableOperationCount

函数功能:获取当前可废弃的(应该是已经执行完毕的)操作链表点的数量

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

国家一级假勤奋研究牲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值