首页 > 其他分享 >Menu5.2运行机制分析总结

Menu5.2运行机制分析总结

时间:2023-04-01 18:25:40浏览次数:44  
标签:总结 函数 删除 互斥 Menu5.2 链表 callback 运行机制 节点

同步机制分析

示例代码对于任务管理采用了单向链表的管理方式,包含了创建、删除、添加、删除、搜索节点以及获取链表头和下一个节点的功能(在Menu5.2中,仅支持默认的)。这些操作涉及多线程并发操作,所以采用了互斥量(mutex)进行同步。当一个线程需要对链接表进行修改操作时,需要先对互斥量进行加锁,完成修改后再对互斥量进行解锁。这样可以避免多个线程同时对链接表进行修改而导致的数据不一致和冲突问题。例如,在添加节点时,如果多个线程同时调用了 AddLinkTableNode函数,由于添加节点时需要修改链表的尾指针,如果没有使用互斥量进行同步,就可能会导致链表的结构被破坏。在删除节点时,需要先搜索到要删除的节点的前一个节点,然后再进行删除操作,这个过程同样需要使用互斥量进行同步。 如图所示结果是同时使用ubuntu和xshell进程访问menu的运行结果,用于检测可复用性:



callback机制分析

在编程中,callback函数指的是在某个函数执行完毕后自动调用的另一个函数。通常,我们将这个另一个函数作为参数传递给第一个函数,并在第一个函数执行完毕后调用这个参数函数。

callback函数机制通常用于异步编程中。在异步编程中,某些操作可能需要等待一段时间才能完成(例如从网络上下载大量数据)。在等待操作完成的同时,我们可以继续执行其他代码,以避免程序被阻塞。当操作完成后,我们可以使用callback函数机制来通知程序,以便程序可以在操作完成后执行相应的代码。
该代码中的callback是通过指针函数实现的,是将函数作为参数传递给其他函数的方式。

在Menu5.2中,以下函数使用了callback:

  • SearchLinkTableNode,其中的参数int Condition(tLinkTableNode * pNode, void * args)即为callback函数。
  • AddLinkTableNode中在pthread_mutex_lockpthread_mutex_unlock之间的代码块是一个原子操作,可以防止在多线程环境中添加节点时的竞争条件。
  • DelLinkTableNode中在pthread_mutex_lockpthread_mutex_unlock之间的代码块是一个原子操作,可以防止在多线程环境中删除节点时的竞争条件。

在这些函数中,callback函数的执行是由函数内部的逻辑来控制的。例如,SearchLinkTableNode会遍历整个链表并在每个节点上调用callback函数,直到找到一个节点满足callback函数的条件或者链表遍历完成。而AddLinkTableNodeDelLinkTableNode函数则会在添加或删除节点之前先执行callback函数,如果callback函数返回的是失败,则不会进行添加或删除操作。

在这些函数中,callback函数可以用来定制LinkTable的功能,例如搜索LinkTable中满足一定条件的节点。通过将callback函数作为参数传递,可以实现代码的复用和扩展性。同时,在多线程环境中使用callback函数还可以避免竞争条件,提高代码的稳定性和可靠性。

标签:总结,函数,删除,互斥,Menu5.2,链表,callback,运行机制,节点
From: https://www.cnblogs.com/zxc3wyx/p/17279030.html

相关文章

  • 装疯卖傻总结性blog
    前言1.    Scannerin=newScanner(System.in);Scanner是一个类,in是一个实例或者说是对象,new是一个创建对象的方法2.(float)(x/0.45359237)强制数据类型转换的写法3.String[]race=newString[]{"人类","精灵","兽人","暗精灵"};创建数组格式likethis,与c不一样要......
  • makefile使用总结(一)
    本文参考《跟我一起写Makefile》编写,并做了一些适合个人习惯的修改,稍加总结而成。 首先提出的问题是:什么是makefile?为什么要用makefile?如何使用makefile?为了回答这三个问题,下面就围绕这些问题做一些记录。什么是makefile?简单点说makefile是一个描述了整个工程的编译规......
  • docker 常用命令总结
    attach#当前shell下attach连接指定运行镜像build#通过Dockerfile定制镜像commmit#提交当前容器为新的镜像cp#从容器中拷贝指定文件或者目录到宿主机中create#创建一个新的容器,同run,但不启动容器diff......
  • 题目集1~3的总结性Blog
    1、前言:前三次题目集主要涉及到java的编程基础知识和有关类的简单知识。(1)其中涉及了Java中的面向对象编程、控制语句、输入输出流、类和对象等基础知识点。具体包括类的定义、构造函数、成员变量和成员方法、访问权限修饰符、条件语句、循环语句、Scanner类的使用、System.out.p......
  • 高考数学必考题型总结(材料来自网上)
    END......
  • Kotlin 总结
    kotlin定义泛型类Kotlin中定义泛型类可以使用以下语法:kotlinclassMyClass<T>(varargitems:T){privatevallist=items.toMutableList()funaddItem(item:T){list.add(item)}funremoveItem(item:T){list.remove(item)......
  • 第一次博客:PTA题目集1-3总结
    第一次博客:PTA题目集1-3总结前言:JAVA是一门非常好的语言,因其面向对象的思想,在解决问题时思路与上学期学习的C语言截然不同,但是其优势也是显然易见的,特别是在写大型程序时其面向对象的思想,可以让人思路清晰。 这次PTA中三个“菜单计价”的题目......
  • 3.30学习总结
    <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%@pageimport="java.io.*,java.util.*"%><!DOCTYPEhtml><html><head><metacharset="utf-......
  • 3.29学习总结
    packagetrain;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSetMetaData;importjava.util.ArrayList;importjava.util.List;publicclassTrain{ publicStringl_search(intm,Stringline)throwsException{ Stringa=......
  • 3.31学习总结
    <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%@pageimport="java.io.*,java.util.*"%><!DOCTYPEhtml><html><head><metacharset="utf-......